2009-07-24 6 views
1

J'ai un fichier texte Qfile.txt et le contenu est le suivant, et je veux créer un autre fichier avec les mêmes informations et les réponses sont différentes. Qfile1.txt, Qfile2.txtPourquoi mon preg_replace() sur le contenu d'un fichier multiligne sous Windows échoue-t-il?

Qfile.txt

Question "What is your age?" 
Answer "" 

Question "What you doing?" 
Answer "" 

Question "What is you name?" 
Answer "" 

Qfile1.txt

Question "What is your age?" 
Answer "25" 

Question "What you doing?" 
Answer "chatting" 

Question "What is you name?" 
Answer "Midhun" 

Je veux lire les questions du Qfile.txt et stocker les informations sur Qfile1.txt avec en PHP. J'ai écrit un code, mais la mise en correspondance de modèle ne fonctionne pas:

$contents=file_get_contents("Qfile.txt"); 
foreach(/*bla bla*/) 
{ 
    $pattern = "/Question \"".preg_quote($id, '/')."\"\nAnswer \"\"/"; 

    $string = str_replace('"', '\"', $string); 

    $replacement = "Question \"$id\"\nAnswer \"". $string . "\""; 

    $result = preg_replace($pattern, $replacement, $contents); 
} 

Le preg_replace($pattern, $replacement, $contents); ne fonctionne pas.

Répondre

3

Impossible de répliquer; votre code, convenablement adapté, fonctionne bien pour moi. La seule chose que je peux penser est que peut-être vous écrivez ceci sur une machine de Windows et votre dossier de texte a des terminateurs de ligne de CRLF. Dans ce cas, vous devez changer votre code:

$contents=file_get_contents("Qfile.txt"); 
foreach(/*bla bla*/) 
{ 
    $pattern = "/Question \"".preg_quote($id, '/')."\"(\r?\n)Answer \"\"/"; 

    $string = str_replace('"', '\"', $string); 

    $replacement = "Question \"$id\"$1Answer \"". $string . "\""; 

    $result = preg_replace($pattern, $replacement, $contents); 
} 

Les changements sont sur les lignes $pattern = et $replacement =. Je l'ai écrit de façon à ce qu'il conserve le modèle de terminaison de ligne en place (sur les deux qu'il supporte, LF et CRLF).

+0

Oui je travaille sur windows machine. – coderex

+0

C'est votre problème, alors. Modifiez votre code ci-dessus et cela devrait le réparer. – chaos

+0

oui son travail tanQz beaucoup :) – coderex

Questions connexes