Newsgroup: it.comp.programmare
Titolo: Ricerca stringa e stampa riga dove la stringa compare

Ciao a tutti,
sto cercando di realizzare una piccola applicazione in C che riceve come 
argv[1] il nome assoluto di un file e come argv[2] una stringa. 
L'applicazione mi restituisce le righe in cui compare la stringa.
Io ho pensato di ricercare la stringa all interno del file, però il mio 
problema dopo è come farmi restituire la riga dove la stringa compare.
Qualche idea?
Grazie 

 Qualche idea?
Da' un'occhiata ai sorgenti di grep [1]... e cerca dove parsa l'opzione "-n" ;)
Ciao,
David
[1] penso sia scritto in C, ma non ne sono sicuro... potrebbe essere un
qualsiasi linguaggio $foo.
-- 
 . ''`.  Debian maintainer | 
http://wiki.debian.org/DavidPaleino
 : :'  : Linuxer #334216 --|-- 
http://www.hanskalabs.net/
 `. `'`  GPG: 1392B174 ----|---- 
http://snipr.com/qa_page
   `-   2BAB C625 4E66 E7B8 450A C3E1 E6AA 9017 1392 B174

Quindi secondo te mi conviene generare un processo figlio che esegua il grep
e mi mandi l'output della grep al padre? e poi dopo il padre si occupa di
stampare la riga? 

1) quota meglio
2) non rompere i thread


No, quello che ti sto suggerendo è di dare un'occhiata al codice di grep, che
ha un'opzione, "-n", che fa proprio quello che vuoi tu. Detta brutalmente,
"copia" il suo codice (ovviamente dovrai adattarlo ;)
David


Cristiano ha scritto:

Se la stringa non contiene caratteri di fine riga, mi sembra che basti 
leggere in sequenza tutte le righe del file, e cercare la stringa nella 
riga corrente.
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

Qualche idea?
open input file
line <- 0
while true
  read string from input file
  if eof(input file) 
    break while
  end if 
  ++line
  if substring in string 
     print "found at line: " line
  end if
end while
close input file

Andrea Laforgia ha scritto:

meglio while not eof
perche' se il file di input fosse vuoto, il primo read produrrebbe un 
errore.

errore.
Proprio no.
A parte il fatto che si tratta di pseudocodice (e quindi avrebbe più
senso discutere dell'algoritmo e non del codice in sé), il senso è che
la prima lettura semplicemente imposterebbe a true il flag di eof
(come accade, in un modo o nell'altro, in tutti i linguaggi di questo
mondo). In C, per esempio, uno scrive if (fgets(...)) e quindi prova
effettivamente a fare la lettura.

 effettivamente a fare la lettura.
Il C permette di testare la condizione di EOF e contemporaneamente
effettuare la lettura. 
In base al linguaggio a disposizione uno si adegua alle risorse che ci
sono e cerca di sfruttarle nel modo migliore.
In pseudo codice, dopo aver aperto il file si deve effettuare un ciclo che
testa la condizione di EOF, e finche' non ci si arriva, leggi la riga,
cerchi la sottostringa, stampi se la trovi, fine ciclo.
if open {
  while not eof {
    if read line {
      if substring found {
        print
      }
    }
    else {
      error
      break
    }
  }
  close
}
else {
  error
}
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Prima testi la condizione di eof, e poi effettui la lettura.
La versione corretta:
open input file
line <- 0
while not eof(input file) 
  read string from input file
