2010-01-21 8 views
0

J'ai le fichier bloc-notes suivant;Explode fonction en PHP

dbName:    

tableName:  

numberOfFields: 

Je suis en train d'écrire une application php qui affecte la valeur de dbName à $ dbName, tableName à $ tableName et numberOfFields à numFields $.

Mon code est:

$handle = @fopen("config.txt", "r"); 
if ($handle) { 
    while (!feof($handle)) { 
     $buffer = fgets($handle, 4096); 
     list($dbName, $tableName, $numFields) = explode(":", "$buffer"); 
    } 
    fclose($handle); 
} 

cependant ":" ne fonctionne pas comme il y a des sauts de ligne entre dbName et le nom de la table. Comment puis-je faire exploser $ buffer, en gardant les sauts de ligne dans le fichier du bloc-notes?

Merci.

+0

Je suggérerais aussi quelques choses - n'utilisant pas '@' pour supprimer les avertissements ou les erreurs, et aussi, en utilisant file_get_contents ou file() plutôt que fopen. – JAL

+0

noté, merci =) – user254688

Répondre

4

Jetez un oeil à la file fonction. Il prend en charge l'ouverture et la lecture du fichier et renvoie un tableau de lignes à partir du fichier. Vous pouvez ensuite parcourir le tableau et opérer sur chaque ligne individuellement.

http://us.php.net/manual/en/function.file.php

+0

fonctionne très bien! comment puis-je choisir, disons, ligne 3? Merci – user254688

+0

$ lignes = fichier ('/ chemin/vers/fichier.txt'); $ line3 = $ lignes [2]; – echo

+0

peut vouloir mentionner qu'il y aura un \ n ou un \ r ou un \ r (nouveau caractère de ligne [s]) à la fin de cela.donc vous voulez faire 'rtrim ($ lines [2])' si c'est quelque chose de critique comme un utilisateur/passe (pas de balisage). –

0

fgets ne renvoie qu'une seule ligne. Il n'y a aucun moyen $buffer aurait jamais tous les trois éléments à la fois, de sorte que l'affectation à list() est erronée. Pour la première ligne, explode() retournera un tableau avec deux éléments: "dbName" (texte avant les deux points) et "" (texte après les deux points).

0

Est-ce que ce travail:

list ($dbName, $tableName, $numFields) = explode (':', implode ('', file ('config.txt'))); 
+0

non, il renvoie "dbName tableName numberOfFields" lorsque i echo $ dbName – user254688

1

vous pouvez le faire:

$data=file_get_contents("file"); 
$s = preg_split("/\n\n+/m", $data); 
print_r($s); 
0

Si vous êtes sûr du contenu en ligne, et le fichier ne grandiront pas arbitrairement grand:

1 <?php 
    2 
    3 $handle = @fopen("config.txt", "r"); 
    4 if ($handle) { 
    5  $buffer = ""; 
    6  while (!feof($handle)) { 
    7   $buffer = $buffer . trim(fgets($handle, 4096)); 
    8  } 
    9  fclose($handle); 
10 
11  list($dbName, $tableName, $numFields) = explode(":", $buffer); 
12 } 
13 
14 ?> 

La boucle while parcourt toutes les lignes et concatène sur le même tampon après avoir supprimé les espaces. Cela ne laisse que le contenu séparé par ":". Ceci est maintenant susceptible d'exploser. Comme l'a écrit Nicolas, feof obtient une ligne à la fois, donc l'affectation de la liste doit se faire en dehors de la boucle.