2013-03-17 5 views
-2

J'ai un fichier txt qui ressemble à ceci:lire un fichier et de travailler avec le contenu

<option value="val1">name1</option> 
<option value="val2">name2</option> 
<option value="val3">name3</option> 
<option value="val4">name4</option> 

Il y a quelques dizaines de lignes dans ce fichier, tout ressembler à ça. Comment puis-je lire ce fichier et convertir chaque ligne en quelque chose comme ça -

$data['val1'] = 'name1'; 
$data['val2'] = 'name2'; 
$data['val3'] = 'name3'; 
$data['val4'] = 'name4'; 

J'ai essayé php, lire le fichier, ajouter du contenu dans un tableau chaque ligne dans une poche, alors je suis coincé, je n'ai aucune idée comment briser chaque ligne en morceaux pour obtenir val et le nom

Répondre

0

sed est bon outil pour cela:

sed "s|<option value=\"\(.*\)\">\(.*\)</option>|\$data['\1'] = '\2';|g" test.txt 

Les \(.*\) sections forment deux groupes de capture tout en correspondant à votre ligne. Ensuite, nous pouvons sortir le texte capturé par ces groupes de n'importe quelle façon en utilisant \1 et \2.

Ceci n'est utile que si vous cherchez un moyen rapide et sale de faire correspondre le format html. Si le code HTML est plus complexe que votre exemple, les expressions régulières commencent à s'effondrer.

+0

[se désagréger en effet;)] (http://stackoverflow.com/questions/1732348/regex-match- open-tags-except-xhtml-self-contained-tags) – Lix

+0

'sed' a fait l'affaire, merci –

0

Ce que vous voulez faire est de lire chacune de ces lignes et pour chaque ligne, exécutez une fonction strip_tags(). Cela supprimera tous les éléments HTML et ne conservera que les données textuelles. Dans ce cas, il sera name1/2/3/4/etc ...

Certains pseudo-code pour vous -

$file = fopen("your_file.txt", "r"); // open the file in read-only mode 
$index = 1; // track the line number you are currently on 
$finalArray = array(); // prepare final array to be populated 
while (!feof($file)) { // loop over the entire file, line by line 
    $line = fgets($file); // retrieve the current line of the file 

    // parse string into DOM object 
    $dom = new DOMDocument(); 
    $dom->loadHTML($line); 
    // extract the option tag for this line 
    $tags = $dom->getElementsByTagName('option'); 
    // iterate over the tag list (in our case there will only be one) 
    foreach ($tags as $tag) { 
    // extract the "value" parameter for the key 
    // and perform strip_tags() on the contents 
    $finalArray[$tag->getAttribute('value')] = strip_tags($line); 
    } 
} 
fclose($file); 
+0

' value' c'est différent sur chaque ligne, ce n'est pas val + numéro –

+0

@adr - J'ai fait quelques changements, Cela devrait être ce que vous cherchez maintenant. – Lix

+0

Vous devez vous méfier de HTML mal formé dans ce fichier - assurez-vous de gérer correctement les erreurs (s'il y en a) – Lix

Questions connexes