2009-12-15 4 views
1

Je tiens à remercier le membre Stackoverflow Pratap .R d'abord parce qu'il m'a aidé avec le code. J'ai toujours un petit problème de formatage avec l'une de mes fonctions de remplacement. Qu'est-ce qui se passe est quand je remplace </me> il remplace par ;. Je ne peux pas avoir la fin de la rangée avoir un ; à la fin.C# streamwriter problème de mise en forme

using (FileStream strm = new FileStream(exportfile, FileMode.Create)) 
{ 
    using (StreamWriter writer = new StreamWriter(strm)) 
    { 
     SqlCommand cmd = new SqlCommand(sql, con); 
     SqlDataReader reader = cmd.ExecuteReader(); 

     for (int i = 0; i < reader.FieldCount; i++) 
      writer.Write((i == 0 ? "" : "|") + reader.GetName(i)); 

     writer.Write("\n"); 

     while (reader.Read()) 
     { 
      for (int i = 0; i < reader.FieldCount; i++) 
      { 
       writer.Write 
       (
        (i == 0 ? "" : "|") + 
        reader[i].ToString().Replace(@"<me> ","") 
         .Replace(@"</me>", "|").Replace(@"</me>", ";") 
         .Replace('\n', ' ').Replace('\r', ' ') 
       ); 
      } 

      writer.WriteLine(); 
     } 

     reader.Close(); 
    } 
}

Ainsi, vous pouvez voir quand cela se produit avec ";". Je ne peux pas avoir un; terminer la rangée. Toutes les suggestions ou astuces toujours apprises.

+0

Avez-vous essayé de le diviser en plusieurs lignes et en traversant le co de voir quel Replace() se passe avant qu'il ne le devienne. –

Répondre

3

objets String ont aussi une merveilleuse TrimEnd() fonction

string s = "Hello;"; 
s = s.TrimEnd((char)';'); 
+0

TrimEnd - gentil un! –

+0

peut-être une question stupide alors pardonnez-moi, comment pourrais-je appliquer cela à ce que j'ai? –

+0

writer.Write ((i == 0? "": "|") + ((I == 0? "": ";") + Lecteur [i] .ToString(). Remplacer (@ "", "") .Remplacer (@ " |", "|"). Remplacer (@ "", ";"). Remplacer ('\ n', '') .Remplacer ('\ r', '') .TrimEnd ((char) ';'))); –

3

Si vous ne souhaitez pas remplacer </me> avec ;, ne devrait pas vous retirer ceci:

Replace(@"</me>", ";") 
+0

parce que je dois le remplacer par;, est une balise multientry dans SQL pour un programme tiers. Ma ligne ne peut tout simplement pas se terminer par. Donc, cela exporte un fichier texte à partir de SQL. –

+0

J'allais dire la même chose. :) – GrayWizardx

0

Y at-il des raisons pour lesquelles vous faites tant sur une ligne? En lisant votre code, j'ai mal à la tête!

string value = reader[i].ToString().Replace(@"<me> ", "").Replace(@"</me>|", "|").Replace(@"</me>", ";").Replace('\n', ' ').Replace('\r', ' '); 

if (value.EndsWith(";")) 
{ 
    value = value.Substring(0, value.Length - 1); 
} 
writer.Write((i == 0 ? "" : "|") + value); 
+0

((i == 0? "": "|") Est la partie la plus importante de cela –

0

Vous pouvez toujours changer à:

writer.Write((i==0?"":"|") + reader[i].ToString().Replace(@"<me> ", "").Replace(@"</me>|", "|").Replace(@"</me>", "; ").Replace('\n', ' ').Replace('\r', ' ')); 

Il suffit d'ajouter un espace qui est ce que vous paraissez faire ensuite