Fractionner le texte avec des "\r\n'
Je suivais ce l'article
Et je suis venu avec ce code:
string FileName = "C:\\test.txt";
using (StreamReader sr = new StreamReader(FileName, Encoding.Default))
{
string[] stringSeparators = new string[] { "\r\n" };
string text = sr.ReadToEnd();
string[] lines = text.Split(stringSeparators, StringSplitOptions.None);
foreach (string s in lines)
{
Console.WriteLine(s);
}
}
Voici un exemple de texte:
somet interesting text\n
some text that should be in the same line\r\n
some text should be in another line
Voici le résultat:
somet interesting text\r\n
some text that should be in the same line\r\n
some text should be in another line\r\n
Mais ce que je veux, c'est ceci:
somet interesting textsome text that should be in the same line\r\n
some text should be in another line\r\n
Je pense que je devrais obtenir ce résultat, mais de toute façon je suis en manque de quelque chose...
- Pourquoi n'utilisez-vous pas
File.ReadAllLines
ouFile.ReadLines
? Console.WriteLine()
ajoutera le retour à la ligne automatique après chaque chaîne dans votre tableau. Vous souhaitez fusionner l'ensemble de lignes AVANT la boucle, ou comme une réponse proposé, remplacer les\n
avant de vousSplit
le texte.- Je veux avoir la ligne qui précisément se termine avec
\r\n
pas\n
ou\r
. - Le problème n'est pas que vous avez
\r\n
et\n
à la fin, mais que vous êtes en oubliant que les lignes qui contiennent déjà des sauts de lignes. Donc, même si vous les enlevez, vous avez trois lignes dans le fichier. - Êtes-vous sûr que la première ligne de la sortie se termine avec
\r\n
? Ajoutez cette ligne et de voir si c'est ce que vous attendez:Console.WriteLine("lines.Length={0}", lines.Length);
Vous devez vous connecter pour publier un commentaire.
Le problème n'est pas la division, mais plutôt avec la
WriteLine
. Un\n
dans une chaîne de caractères imprimés avecWriteLine
va produire un "extra" de la ligne.Exemple
Pour résoudre le problème, supprimez
\n
avant d'imprimer la chaîne.Console.WriteLine()
étais en train de traduire\n
en\r\n
.Cela a fonctionné pour moi.
Je pense que le problème est dans votre fichier texte. Il est probablement déjà divisé en trop grand nombre de lignes, et à vous lire, il "ajoute" supplémentaires
\r
et/ou\n
caractères (tels qu'ils existent dans le fichier). Vérifiez votre de ce qui est lu danstext
variable.Le code ci-dessous (sur une variable locale avec votre texte) fonctionne très bien et se divise en 2 lignes:
J'ai pris un plus compact approche pour diviser une entrée résultant d'une zone de texte dans une liste de chaîne de caractères . Vous pouvez l'utiliser si convient à votre but.
le problème est que vous ne pouvez pas diviser par \r\n j'ai donc enlevé le \n à l'avance et divisé uniquement par \r
J'aime cette approche parce que vous pouvez le faire en une seule ligne.
Cela a fonctionné pour moi.
La première remplacer remplace le
\r\n
à partir du fichier texte de nouvelles lignes, et le second remplace le réel\r\n
texte converti à\\r\\n
lorsque les fichiers sont en lecture. (Lorsque le fichier est lu\
devient\\
).De la lecture du fichier est plus facile avec la statique
File
classe:Note: Le texte peut également contenir des tabulation verticale
\v
. Ceux-ci sont utilisées par Microsoft Word comme manuel mais les sauts de ligne.Afin de déceler toutes sortes de pauses, vous pouvez utiliser les regex pour le remplacement
Code suivant donne les résultats escomptés.