2008-10-08 7 views
1

J'ai un fichier texte avec plusieurs enregistrements. Je veux rechercher un nom et une date, par exemple si j'ai tapé JULIUS CESAR comme nom alors toutes les données sur JULIUS seront extraites. Que faire si je veux seulement extraire des informations?Recherche puis extrait

Record number: 1 
Date: 08-Oct-08 
Time: 23:45:01 
Name: JULIUS CESAR 
Address: BAGUIO CITY, Philippines 
Information: 
I lived in Peza Loakan, Bagiou City 
A Computer Engineering student 
An OJT at TIPI. 
23 years old. 

Record number: 2 
Date: 09-Oct-08 
Time: 23:45:01 
Name: JOHN Castro 
Address: BAGUIO CITY, Philippines 
Information: 
I lived in Peza Loakan, Bagiou City 
A Electronics Comm. Engineering Student at SLU. 
An OJT at TIPI. 
My Hobby is Programming. 


Record number: 3 
Date: 08-Oct-08 
Time: 23:45:01 
Name: CESAR JOSE 
Address: BAGUIO CITY, Philippines 
Information: 
Hi,, 
I lived Manila City 
A Computer Engineering student 
Working at TIPI. 
+0

Est-ce que cette question a vraiment quelque chose à voir avec SQL? –

Répondre

2

Si elle est une ligne par entrée, vous pouvez utiliser une expression régulière comme:

$name = "JULIUS CESAR"; 

Ensuite, utilisez:

/$name/i 

pour tester si chaque ligne est sur le point « JULIUS CESAR. " Ensuite, il vous suffit d'utiliser l'expression rationnelle suivante pour extraire les informations (une fois que vous trouverez la ligne):

/Record number: (\d+) Date: (\d+)-(\w+)-(\d+) Time: (\d+):(\d+):(\d+) Name: $name Address: ([\w\s]+), ([\w\s]+?) Information: (.+?)$/i 

1 $ = Numéro de la fiche

2- $ $ 4 = Date

5- $ $ 7 = Temps

6 $ = adresse

$ 7 = commentaires

J'écrirais un exemple de code, mais mon perl est rouillé. J'espère que cela aide :)

+0

Cela ne me semble pas juste ... à la fin de votre regex que $, je ne me souviens pas si c'est la fin de la chaîne ou la fin de la ligne, mais de toute façon je ne pense pas que ce soit droite. Si c'est la fin de la chaîne, vous obtiendrez l'information et tous les enregistrements qui suivent JULIUS CESAR. Si cela signifie la fin de la ligne, vous obtiendrez seulement 1 ligne de texte au lieu de toutes les informations. – Nick

-1

En PHP, vous pouvez exécuter une instruction SQL select comme:

"SELECT * OÙ name LIKE '% JULIUS';"

Il ya des aspects natifs de PHP où vous pouvez obtenir tous vos résultats dans un tableau associatif. Je suis sûr que c'est commandé par ordre de rangée. Alors vous pouvez juste faire quelque chose comme ceci:

echo implode ("", $ whole_row);

J'espère que c'est ce que vous cherchez!