J'ai vu quelques questions ici liées à la suppression des guillemets doubles. Mais cela n'a pas résolu mon problème. Ils ont dit d'utiliser les fonctions Remplacer ou Limiter. J'ai utilisé mais le problème reste.
Mon code:
DataTable dt = TypeConveriontHelper.ConvretExcelToDataTable(SourceAppFilePath);
string targetPath = BatchFolderPath + @"\" + "TRANSACT.INX";
StreamWriter wrtr = null;
wrtr = new StreamWriter(targetPath);
for (int x = 0; x < dt.Rows.Count; x++)
{
string rowString = "";
for (int y = 0; y < dt.Columns.Count; y++)
{
if (y == dt.Columns.Count - 1)
{
rowString += "\"" + dt.Rows[x][y].ToString() + "\"";
}
else
{
rowString += "\"" + dt.Rows[x][y].ToString() + "\"~";
}
}
rowString.Replace('"', ' ').Trim();
wrtr.WriteLine(rowString);
}
wrtr.Close();
wrtr.Dispose();
J'ai essayé en utilisant rowString.Replace('"', ' ').Trim();
dans le code ci-dessus. Mais les doubles guillemets sont présents tels quels. Prouvez-moi une solution. Merci.
Vous devez le réaffecter à rowString
:
rowString = rowString.Replace('"', ' ').Trim();
Les chaînes sont immuables .
row.String.Replace(...)
vous retournera une chaîne, puisque vous ne lui attribuez rien, il sera ignoré. Cela ne changera pas l'objet rowString
d'origine.
Vous pouvez utiliser String.Empty
ou ""
pour remplacer les guillemets doubles par une chaîne vide, au lieu d'un seul espace ' '
. Donc, votre déclaration devrait être:
rowString = rowString.Replace("\"", string.Empty).Trim();
(N'oubliez pas de passer guillemet double sous forme de chaîne"\""
, car la méthode surchargée par string.Empty nécessitera que les paramètres soient de type chaîne).
Vous pouvez vous débarrasser de Trim()
à la fin, si vous tentiez de supprimer des espaces ajoutés pendant string.Replace
au début ou à la fin de la chaîne.
Le rognage peut supprimer n'importe quel caractère, pas seulement les espaces.
myString = myString.Trim('"');
http://msdn.Microsoft.com/en-us/library/d4tt83f9%28v=vs.110%29.aspx
Votre problème est une erreur commune. Voici ce que vous devez faire:
rowString = rowString.Replace('"', ' ').Trim();
Assurez-vous de retourner votre résultat dans une variable (rowString =
). Si vous ne le faites pas, C # exécutera toujours les méthodes mais ne modifiera pas la variable. C'est le cas de tous les objets immuables.
Exemple:
rowString.Replace('"', ' ').Trim();
not modifiera l'objet rowString
actuel.
rowString = rowString.Replace('"', ' ').Trim();
remplace l'ancienne valeur de rowString
par le résultat du code à droite.
J'ai écrit cette réponse et je viens de me rendre compte qu'Habib a expliqué exactement la même chose ci-dessus. :)
Cette ligne contient une erreur.
rowString.Replace('"', ' ').Trim();
Puisque replace et trim renvoient tous deux une chaîne, vous devez l'affecter à une variable . En n'affectant pas la chaîne, vous perdrez la valeur générée par les méthodes replace et trim.
var myString = rowString.Replace('"', ' ').Trim();
//Or
rowString = rowString.Replace('"', ' ').Trim();
Dans VB, vous devez essayer ceci:
Replace("""", "");
Mais en C #, vous devez essayer ceci:
Replace("\"", "");
rowString.Replace('"', ' ')
crée un nouvel objet chaîne et ne modifie pas l'objet chaîne existant. Vous devrez donc affecter le nouvel objet chaîne créé à une autre variable ou écraser votre variable existante.
rowString=rowString.Replace('"', ' ').Trim()
or
var somestring=rowString.Replace('"', ' ').Trim()
Comme Habib l'a mentionné, les chaînes sont immuables. Toute manipulation de chaîne doit être réinitialisée avec les données manipulées telles que Remplacer, Inverser, etc.
Essayez donc d’attribuer la chaîne remplacée pour obtenir le comportement souhaité.