2012-06-30 4 views
1

J'essaie de changer du texte dans un fichier .CSV.Comment changer du texte dans un fichier par StreamWriter

StreamReader sReader = new StreamReader(path1); 
while (sReader.Peek() != -1) 
{ 
    rowValue = sReader.ReadLine(); 
    if (rowValue == "25") 
    { 
     sWriter = new StreamWriter(path1); 
     rowValue = "27"; 
     sWriter.WriteLine(rowValue); 
    } 
} 

Rien de ce qui s'est passé. Quelle est la bonne façon, s'il vous plaît?

+0

vous n'êtes pas en train d'écrire quoi que ce soit au courant, votre création juste une nouvelle instance d'un 'StreamWriter' et en changeant la valeur de' rowValue'. – 3aw5TZetdf

+0

Avez-vous utilisé 'Flush()' ?? – yogi

+0

J'ai ajouté une ligne pour écrire rowValue. Encore une fois, la ligne est "25" – Alice

Répondre

1

Vous pouvez facilement accomplir cette tâche avec System.IO.File.ReadAllLines et System.IO.File.WriteAllLines

string[] lines = File.ReadAllLines(path1); 

for(int i = 0; i < lines.Length; i++) 
{ 
    if(lines[i] == "25") lines[i] = "27"; 
} 

File.WriteAllLines(path1, lines); 
+0

Correction des problèmes de syntaxe ... en tapant trop vite, mais sur ce site. –

1

Je ne crois pas que vous puissiez faire ce que vous essayez de faire ... mettre à jour une seule ligne. Si cela fonctionne, vous ajoutez la valeur 27 à la fin de votre fichier. Les méthodes ReadAllLines et WriteAllLines Vous devez lire le fichier entier, modifier la ou les lignes que vous souhaitez modifier, puis le réécrire.

1

Eh bien, si le fichier à lire est pas un très grand, vous pouvez essayer de lire tout en mémoire et écrire de nouveau

string[] lines = File.ReadAllLines(path1); 
using(StreamWrite sw = new StreamWriter(path1)) 
{ 
    foreach(string line in lines) 
    { 
     string lineOut = line; 
     if (line == "25") 
      lineOut = "27"; 
     sw.WriteLine(lineOut); 
    } 
    sw.Flush(); 
} 
+0

Steve, j'ai une erreur sur la ligne 7 - Impossible d'affecter 'line' parce que c'est une variable d'itération foreach – Alice

+0

@Alice, answer mis à jour, mais considérons également l'alternative présentée par Chris Gessler. C'est plus direct – Steve

+0

Yess! Résolu. ThankYou, Steve et Chris – Alice

Questions connexes