Accedi

Ho dimenticato la password

Ultimi argomenti
» argomento
Dom Giu 02, 2013 4:30 pm Da ruggiero98

» problema con la funzione SE aiutoooo x favore?????
Dom Giu 02, 2013 4:18 pm Da ruggiero98

» aiuto in programma con if
Dom Mag 26, 2013 5:39 pm Da ruggiero98

»  CALCOLO PERCENTUALE IN C
Sab Apr 20, 2013 8:22 pm Da ruggiero98

» Costruire un temporizzatore software per accensione luci a led
Lun Mar 25, 2013 2:34 pm Da Cristina Shady

» Ciao a tutti!
Gio Mar 22, 2012 4:19 am Da cosmos91

» Virtualbox VS le periferiche USB
Mar Apr 06, 2010 1:49 pm Da dandeciani

» PROGRAMMA: BINARY CODE
Mar Dic 23, 2008 7:28 pm Da Thalionwen

» saluti a tutti
Mar Dic 23, 2008 7:12 pm Da Thalionwen

» GUIDA : CAP 1 LEZIONE 1 Elementi di base dei programmi in C [Prima Parte]
Sab Nov 29, 2008 11:44 am Da ya89

» un semplice ciao
Sab Nov 29, 2008 11:38 am Da ya89

» Aiuto per alice 7 mega
Ven Nov 14, 2008 4:03 pm Da root

» FORUM: I nuovi banner
Ven Nov 14, 2008 2:48 pm Da Thalionwen

» Zooming Ricorsivo, questo sconosciuto.
Ven Nov 14, 2008 2:43 pm Da Thalionwen

» GUIDA : LEZIONE 4 : UTILIZZARE GLI ARRAY IN C#
Ven Nov 14, 2008 1:54 pm Da ab89

» GUIDA : CAP 1 LEZIONE 1 Elementi di base dei programmi in C [Terza e Ultima Parte]
Ven Nov 14, 2008 12:41 am Da ab89

» GUIDA : CAP 1 LEZIONE 1 Elementi di base dei programmi in C [Seconda Parte]
Mer Nov 12, 2008 12:59 am Da ab89

» [PS2] Dark Cloud
Mar Nov 11, 2008 6:50 pm Da ab89

» [PC] Sacred 2
Lun Nov 10, 2008 10:49 pm Da ab89

» GUIDA : CAP 1 LEZIONE 3 INTRODUZIONE AGLI ARRAY
Lun Nov 10, 2008 1:37 pm Da ab89

Flusso RSS


Yahoo! 
MSN 
AOL 
Netvibes 
Bloglines 



PROGRAMMA Cercare una stringa in un File

Andare in basso

PROGRAMMA Cercare una stringa in un File

Messaggio Da ab89 il Dom Ott 19, 2008 10:04 pm

Il programma che vado a presentare ho come scopo quello di ricercare una sottostringa all'interno di un file di testo.
Il programma segue i seguenti punti :

  • Legge una riga dal file
  • verifica se è presente la substring
  • se la substring è presente stampa la riga
  • ripeti fino alla fine del file
Per la realizzazione di questo programma ho creato 4 funzioni.

  1. int getline(FILE *f, char *s);
  2. int countChars(char *v);
  3. int compare_strs(char *v1, char *v2, int n_v1, int n_v2);
  4. void prnt_sub_str(char *s, int n_chars);
getline
questa funzione accetta come parametri formali 2 argomenti.
Il primo è il puntatore al file dal quale leggere la riga.
Il secondo è un puntatore char, al quale verrà assegnato l'indirizzo della stringa letta.
Infine presenta un tipo di ritorno intero che assumerà i seguenti valori :

  • 0 se la riga letta è l'ultima del file
  • 1 se la riga letta non è l'ultima del file
countChars
questa funzione accetta come argomenti una stringa e restituisce il numero di caratteri dai quali è composta la stringa ( in questo ambito definisco stringa come il vettori di caratteri composto da v[0] fino a quanti non viene trovato il carattere '\n')

compare_strs
questa funzione accetta come parametri formali 4 argomenti .
Due puntatori char e due variabili intere.
Il primo parametro si riferisce alla prima stringa da confrontare.
Il secondo parametro si riferisce alla seconda stringa da confrontare.
Il terzo parametro indica la lunghezza della prima stringa, espressa come numero di caratteri dai quali è composta
Il quarto parametro indica la lunghezza della seconda stringa, espressa come numero di caratteri dai quali è composta
Restituisce infine il seguente valore intero

  • 0 se la substring non viene trovata
  • 1 se la substring viene trovata
prnt_sub_str
Passati come parametri la stringa e il numero di caratteri stampa a video solo i caratteri in quantità pari al numero specificato dall'utente.

Codice:

//////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                                //
//    Programma che esamina il testo di un file e ne scrive le righe se e solo se                    //
//    la riga esaminata contiene la stringa desiderata                        //
//                                                //
//    Autore : Bertin Andrea [ab89]                                    //
//    Ultima Modifica : 16/10/2008 22:34                            //   
//    Versione : 1.0                                        //
//                                                //
//////////////////////////////////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <stdlib.h>

#define MAX_CHARS 1000

int getline(FILE *f, char *s); //legge riga file
int countChars(char *v); //conta i caratteri di una stringa
int compare_strs(char *v1, char *v2, int n_v1, int n_v2); //compara 2 stringhe
void prnt_sub_str(char *s, int n_chars); //data una stringa ne stampa solo n_chars caratteri

main(int argc, char *argv[])
{
    FILE *pf;
    char s[MAX_CHARS];    //stringa letta
    int i_eof = 0;        //se 0 : fine file se 1 : c'è ancora da leggere
    int nc_line = 0;    //numero caratteri di 1 linea
    int nc_str = 0;        //numero caratteri stringa da leggere

    if (argc != 3)
    {
        printf("ERRORE SINTASSI : ./search.x [nome_file] [sub string]\n");
        exit(1);
    }

    if ((pf = fopen(argv[1], "r")) == NULL)
    {
        printf("ERRORE : Il file non esiste\n");
        exit(1);
    }
   
    nc_str = countChars(argv[2]); //restituisce la quantità di caratteri della substring
   
    do
    {
       
        i_eof = getline(pf, s); //legge riga e determina se si è alla fine del file
       
        nc_line = countChars(s); //determina il numero di caratteri della riga letta
       
        //se la stringa s contiene la stringa da cercare data in ingresso
        //scrive s
       
        if (compare_strs(s,argv[2],nc_line,nc_str) == 1)
            prnt_sub_str(s,nc_line);
       
       
       
    }while(i_eof == 1);
   
    fclose(pf);
}

int getline(FILE *f, char *s)
{
    int c = 0;
    int i = 0;
   
    //fino a quando non si incontra la fine della riga o della stringa o del file
   
    while ((c = getc(f)) != EOF && (c != '\n') && (c != '\0')){
        s[i++] = c;
    }
   
    s[i] = '\n';
                   
    if (c == EOF)
        return 0;
    else
        return 1;
}
int countChars(char *s)
{
    int i = 0;
    while (s[i] != '\n' && s[i] != '\0'){
        i++;
    }
   
    return i;
}

int compare_strs(char *s1, char *s2, int n_s1, int n_s2)
{
    int i,j;
    char new_s[n_s1]; //nuova stringa creata
    char c = 0;
    i = 0;
   
    for (i = 0; i <  n_s1; i++){
        c = s1[i];
        new_s[i] = c;
    }
   
    for (i = 0; i < n_s1-n_s2; i++){
       
        //verifica se la sub string (s2) è presente a partire
        //dal carattere s1[i]
       
        for (j = 0; s1[i+j] == s2[j] && j < n_s2; j++){
        }
        if (j == n_s2){
            s1 = &new_s[0];
            return 1;
        }
    }
   
    s1 = &new_s[0];
   
    return 0;
}

void prnt_sub_str(char *s, int n_chars)
{
    int i;
   
    for(i = 0; i < n_chars+1; i++)
        putchar(s[i]);
   
    return;
}

ESECUZIONE DEL PROGRAMMA

Il programma è stato creato in ambiente linux-like (in questo caso open-suse) se ne garantisce o quasi la completa funzionalità in ambienti linux-like.
Per l'esecuzione del programma in sistemi linux-like rispettare la seguente sintassi :
./[nome_eseguibile].x [nome_file_da_leggere] [sub_string]

FINE

Per domande e chiarimenti sono a disposizione Very Happy
Il codice è liberamente usufruibile purchè se ne citi la fonte :
Informatica Programmabile (http://infonprog.forumattivo.it)

_________________
生きるためにもあまり変過ぎるし、死ぬためにもあまり珍し過ぎる。

What D.Gray-man Character Are You?
Hosted By theOtaku.com: Animee

avatar
ab89
Admin
Admin

Numero di messaggi : 74
Età : 29
Località : Rovigo
Data d'iscrizione : 29.09.08

Scheda personaggio
PF:

Visualizza il profilo

Torna in alto Andare in basso

Re: PROGRAMMA Cercare una stringa in un File

Messaggio Da Eine The Phantom il Lun Ott 20, 2008 12:12 pm

Interessante....
Direi fatto anche piuttosto bene...
Bravo Very Happy

_________________
avatar
Eine The Phantom
Admin
Admin

Numero di messaggi : 37
Data d'iscrizione : 28.09.08

Visualizza il profilo http://infonprog.forumattivo.it

Torna in alto Andare in basso

Re: PROGRAMMA Cercare una stringa in un File

Messaggio Da Pablomares il Mer Ott 22, 2008 3:31 pm

Sinceramente, a me non va!!!
Forse ho sbagliato qualcosa io, oppure tu!!!!

Grazie Ciao Very Happy

Pablomares
Neofita
Neofita

Numero di messaggi : 6
Data d'iscrizione : 03.10.08

Visualizza il profilo

Torna in alto Andare in basso

Re: PROGRAMMA Cercare una stringa in un File

Messaggio Da root il Mer Ott 22, 2008 3:43 pm

Sono d'accordo con Pablomares!!! C'è sicuramente qualcosa che non va!!!!

Very Happy
avatar
root
Neofita
Neofita

Numero di messaggi : 11
Data d'iscrizione : 05.10.08

Visualizza il profilo

Torna in alto Andare in basso

Re: PROGRAMMA Cercare una stringa in un File

Messaggio Da ab89 il Mer Ott 22, 2008 7:21 pm

E' stato testato su OpenSuse e funziona correttamente..
Probabilmente sbagliate qualcosa voi..
Provate a dirmi quali errori vi da e vedrò come aiutarvi Very Happy

_________________
生きるためにもあまり変過ぎるし、死ぬためにもあまり珍し過ぎる。

What D.Gray-man Character Are You?
Hosted By theOtaku.com: Animee

avatar
ab89
Admin
Admin

Numero di messaggi : 74
Età : 29
Località : Rovigo
Data d'iscrizione : 29.09.08

Scheda personaggio
PF:

Visualizza il profilo

Torna in alto Andare in basso

Re: PROGRAMMA Cercare una stringa in un File

Messaggio Da Eine The Phantom il Gio Ott 23, 2008 8:46 pm

Infatti funziona !!
Secondo me avete sbagliato voi nell'eseguire il sorgente Exclamation
Eventualmente postate l'errore che vi viene restituito Very Happy

_________________
avatar
Eine The Phantom
Admin
Admin

Numero di messaggi : 37
Data d'iscrizione : 28.09.08

Visualizza il profilo http://infonprog.forumattivo.it

Torna in alto Andare in basso

Re: PROGRAMMA Cercare una stringa in un File

Messaggio Da ya89 il Gio Ott 23, 2008 11:44 pm

Ciao a tutti sono super felice perche sono riuscito da solo a fare il programma search.x per scuola, che ab89 conosce....ab89 sono riuscito!!!!!
Sono fiero di me stesso...ci ho messo tipo 2 gg ma ce l'HO FATTA al contrario di Pablomares e Root!!!!!!! pig
Dai per essere alle prime armi direi di essere soddisfatto!!!!!
Ciaoooo A TUTTIIIIIIIIIIII!!!!!!!!!!!!!!!!!!!!!!!
avatar
ya89
Novizio
Novizio

Numero di messaggi : 17
Data d'iscrizione : 01.10.08

Scheda personaggio
PF:

Visualizza il profilo

Torna in alto Andare in basso

Re: PROGRAMMA Cercare una stringa in un File

Messaggio Da root il Ven Ott 24, 2008 9:39 pm

Non è detta ancora l'ultima parola...
avatar
root
Neofita
Neofita

Numero di messaggi : 11
Data d'iscrizione : 05.10.08

Visualizza il profilo

Torna in alto Andare in basso

Re: PROGRAMMA Cercare una stringa in un File

Messaggio Da Infernet89 il Sab Ott 25, 2008 2:42 pm

La funzione prnt_sub_str è errata.
Stampa un carattere in più.. in effetti non capisco cosa ci faccia quel +1 nella condizione del for °__°
avatar
Infernet89
Neofita
Neofita

Numero di messaggi : 6
Età : 29
Località : Ferrara
Data d'iscrizione : 23.10.08

Visualizza il profilo http://infernet89.netsons.org

Torna in alto Andare in basso

Re: PROGRAMMA Cercare una stringa in un File

Messaggio Da ab89 il Sab Ott 25, 2008 3:01 pm

capito
comunque è giusta
se noti la funzione che conta i caratteri non conta il '\n' quando invece io voglio che venga stampato a video.
quindi in una stringa tipo : CIAO MI CHIAMO MARIO'\n'
il numero dei caratteri è : 20 senza contare il '\n'
quindi sapendo che viene inserito nella stringa
e volendo che venga stampato inserito quel +1 per ottenere il risultato voluto

hai fatto bene ad esprimere un tuo dubbio Very Happy

comunque so che il codice è abbastanza grezzo e può essere migliorato Very Happy
l'avevo fatto in una mezz'ora di relax verso le 2 di notte Very Happy Very Happy

_________________
生きるためにもあまり変過ぎるし、死ぬためにもあまり珍し過ぎる。

What D.Gray-man Character Are You?
Hosted By theOtaku.com: Animee

avatar
ab89
Admin
Admin

Numero di messaggi : 74
Età : 29
Località : Rovigo
Data d'iscrizione : 29.09.08

Scheda personaggio
PF:

Visualizza il profilo

Torna in alto Andare in basso

Re: PROGRAMMA Cercare una stringa in un File

Messaggio Da Infernet89 il Sab Ott 25, 2008 4:05 pm

ab89 ha scritto:capito
comunque è giusta
se noti la funzione che conta i caratteri non conta il '\n' quando invece io voglio che venga stampato a video.
quindi in una stringa tipo : CIAO MI CHIAMO MARIO'\n'
il numero dei caratteri è : 20 senza contare il '\n'
quindi sapendo che viene inserito nella stringa
e volendo che venga stampato inserito quel +1 per ottenere il risultato voluto

hai fatto bene ad esprimere un tuo dubbio Very Happy

comunque so che il codice è abbastanza grezzo e può essere migliorato Very Happy
l'avevo fatto in una mezz'ora di relax verso le 2 di notte Very Happy Very Happy

Cioè insomma, abbiamo una funzione che promette di "contare i caratteri che compongono una stringa", e che invece "conta i caratteri prima del carattere di fine riga, e una funzione che "stampa n caratteri di una stringa", e invece ne stampa n+1.

In questo caso vanno bene, ma metti che voglia richiamarle da un altro programma... Secondo il divino tomo: "le funzioni devono fare una cosa sola, e bene", e queste Rolling Eyes
avatar
Infernet89
Neofita
Neofita

Numero di messaggi : 6
Età : 29
Località : Ferrara
Data d'iscrizione : 23.10.08

Visualizza il profilo http://infernet89.netsons.org

Torna in alto Andare in basso

Re: PROGRAMMA Cercare una stringa in un File

Messaggio Da ab89 il Sab Ott 25, 2008 4:13 pm

Infernet89 ha scritto:
ab89 ha scritto:capito
comunque è giusta
se noti la funzione che conta i caratteri non conta il '\n' quando invece io voglio che venga stampato a video.
quindi in una stringa tipo : CIAO MI CHIAMO MARIO'\n'
il numero dei caratteri è : 20 senza contare il '\n'
quindi sapendo che viene inserito nella stringa
e volendo che venga stampato inserito quel +1 per ottenere il risultato voluto

hai fatto bene ad esprimere un tuo dubbio Very Happy

comunque so che il codice è abbastanza grezzo e può essere migliorato Very Happy
l'avevo fatto in una mezz'ora di relax verso le 2 di notte Very Happy Very Happy

Cioè insomma, abbiamo una funzione che promette di "contare i caratteri che compongono una stringa", e che invece "conta i caratteri prima del carattere di fine riga, e una funzione che "stampa n caratteri di una stringa", e invece ne stampa n+1.

In questo caso vanno bene, ma metti che voglia richiamarle da un altro programma... Secondo il divino tomo: "le funzioni devono fare una cosa sola, e bene", e queste Rolling Eyes

Si concordo Very Happy Infatti rappresenta solo una metodologia di risoluzione del problema..
Quello che poi ho terminato funziona molto meglio.
Ovviamente il codice scritto nel forum è sempre e solo a titolo di esempio, spiegare come fare certe cose.
A chi poi utilizzerà il codice spetta il compito di adattarlo alle proprie esigenze.
Se poi ci saranno problemi si è liberi di fare domande Very Happy

_________________
生きるためにもあまり変過ぎるし、死ぬためにもあまり珍し過ぎる。

What D.Gray-man Character Are You?
Hosted By theOtaku.com: Animee

avatar
ab89
Admin
Admin

Numero di messaggi : 74
Età : 29
Località : Rovigo
Data d'iscrizione : 29.09.08

Scheda personaggio
PF:

Visualizza il profilo

Torna in alto Andare in basso

Re: PROGRAMMA Cercare una stringa in un File

Messaggio Da ab89 il Sab Ott 25, 2008 4:35 pm

Che dici ti va meglio così Very Happy
search.c

_________________
生きるためにもあまり変過ぎるし、死ぬためにもあまり珍し過ぎる。

What D.Gray-man Character Are You?
Hosted By theOtaku.com: Animee

avatar
ab89
Admin
Admin

Numero di messaggi : 74
Età : 29
Località : Rovigo
Data d'iscrizione : 29.09.08

Scheda personaggio
PF:

Visualizza il profilo

Torna in alto Andare in basso

Re: PROGRAMMA Cercare una stringa in un File

Messaggio Da Infernet89 il Sab Ott 25, 2008 9:56 pm

ab89 ha scritto:Che dici ti va meglio così Very Happy
search.c
megaupload ;_;

La prossima volta usa http://rafb.net/paste/ .

Comunque sì, ora ci siamo Smile
avatar
Infernet89
Neofita
Neofita

Numero di messaggi : 6
Età : 29
Località : Ferrara
Data d'iscrizione : 23.10.08

Visualizza il profilo http://infernet89.netsons.org

Torna in alto Andare in basso

Re: PROGRAMMA Cercare una stringa in un File

Messaggio Da ab89 il Sab Ott 25, 2008 10:53 pm

son contento ...
comunque proverò quel sito Very Happy

_________________
生きるためにもあまり変過ぎるし、死ぬためにもあまり珍し過ぎる。

What D.Gray-man Character Are You?
Hosted By theOtaku.com: Animee

avatar
ab89
Admin
Admin

Numero di messaggi : 74
Età : 29
Località : Rovigo
Data d'iscrizione : 29.09.08

Scheda personaggio
PF:

Visualizza il profilo

Torna in alto Andare in basso

Re: PROGRAMMA Cercare una stringa in un File

Messaggio Da Contenuto sponsorizzato


Contenuto sponsorizzato


Torna in alto Andare in basso

Torna in alto

- Argomenti simili

 
Permessi di questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum