2011-11-07 17 views
7

Voglio trovare una stringa di testo specifica in uno o più file di testo in una directory, ma non so come. Ho fatto ricerche su Google da un po 'di tempo e non ho trovato nulla. Perciò chiedo a voi ragazzi come posso risolvere questo problema?Trova testo specifico in più file TXT in PHP

Grazie in anticipo.

risposta

5

È possibile ottenere ciò che è necessario senza l'uso di grep. Grep è uno strumento utile per quando sei sulla linea di comando, ma puoi fare ciò che ti serve con un po 'di codice PHP.

questo piccolo frammento, ad esempio, ti dà risultati simili a grep:

$path_to_check = ''; 
$needle = 'match'; 

foreach(glob($path_to_check . '*.txt') as $filename) 
{ 
    foreach(file($filename) as $fli=>$fl) 
    { 
    if(strpos($fl, $needle)!==false) 
    { 
     echo $filename . ' on line ' . ($fli+1) . ': ' . $fl; 
    } 
    } 
} 
+0

Grazie! Ha funzionato come un incantesimo, ma come posso ottenere un "codice" specifico in una riga? Una riga si presenta così: 'TME: ... | UID: ... | FNE: ... | MSG: ... | IPA: ...'. Il "codice" è per esempio 'UID'. – Erik

+0

Se ho capito bene, 'if (strpos ($ line, '| UID:')! == false)' potrebbe fare quello che ti serve. – ghbarratt

+0

Come dovrebbe essere l'eco all'interno di questo se? – Erik

10

Se è un host Unix si sta eseguendo in poi, si può fare una chiamata di sistema per grep nella directory:

$search_pattern = "text to find"; 
$output = array(); 
$result = exec("/path/to/grep -l " . escapeshellarg($search_pattern) . " /path/to/directory/*", $output); 

print_r($output); 
// Prints a list of filenames containing the pattern 
+0

Sto utilizzando Windows :) Ma il mio host web utilizza Linux. È possibile farlo funzionare anche su Windows, quindi posso testarlo prima di caricarlo sul mio web host? – Erik

+1

Puoi installare grep per Windows http://gnuwin32.sourceforge.net/packages/grep.htm (e le sue dipendenze elencate nella stessa pagina) –

1

Basta specificare un nome file, ottenere il contenuto del file ed eseguire la regex corrispondente al contenuto del file. Vedere this e this per ulteriori dettagli per quanto riguarda il mio codice di esempio qui sotto:

$fileName = '/path/to/file.txt'; 
    $fileContents = file_get_contents($fileName); 
    $searchStr = 'I want to find this exact string in the file contents'; 

    if ($fileContents) { // file was retrieved successfully 

     // do the regex matching 
     $matchCount = preg_match_all($searchStr, $fileContents, $matches); 

     if ($matchCount) { // there were matches 
      // $match[0] will contain the entire string that was matched 
      // $matches[1..n] will contain the match substrings  
     } 

    } else { // file retrieval had problems 

    } 

Nota: Questo funziona indipendentemente dal fatto che non sei su una macchina Linux.

Problemi correlati