10
votes

Nouveau caractère de ligne dans c #

J'ai écrit ce code pour compter le nombre de caractères dans un fichier texte: xxx pré>

mais après avoir appliqué ce code dans un fichier contient: p>

1
2
3
4
5
6
7
8
9
0


5 commentaires

Caractère + retour + nouvelle ligne = 3 caractères par ligne = 3 * 10 = 30 au total.


10 caractères + 10 retours de chariot + 10 aliments en ligne? ? \ r \ n


Environnement.NewLine doit correspondre au personnage de la nouvelle ligne dans n'importe quel système d'exploitation.


Avoir une lecture de Méthode StreamReader.Read , la méthode StreamReader.Read lit un seul caractère à la fois.


Pour obtenir le comte, vous pouvez le faire ( string str = fichier.readalltext (@ "c: \ text.txt"); int compte = str.split (nouvelle chaîne [] {environnement.newline}, StringSplitoptions. Aucun) .length; )


5 Réponses :


14
votes

Vous lisez un personnage à la fois et chaque ligne contient trois caractères:

  • un chiffre
  • Un retour chariot ( \ r )
  • une nouvelle ligne ( \ n )

    (Windows utilise \ r \ n comme séquence de nouvelle ligne. Le fait que vous exécutez dans une machine virtuelle sur un Mac n'affecte pas cela.)


0 commentaires

15
votes

sous Windows Chaque nouvelle ligne est composée de deux caractères \ r et \ n . Vous avez 10 lignes, chaque ligne dispose de 1 caractères visibles et de 2 nouveaux caractères de ligne qui ajoutent jusqu'à 30 caractères.

Si vous avez créé votre fichier dans Mac ou Unix / Linux, vous auriez gotton résultat différent (20 caractères). Parce que Unix utilise uniquement \ n et mac utilise uniquement \ r pour une nouvelle ligne.

Vous pouvez utiliser des éditeurs (tels que NOTEPAD ++) pour vous montrer de nouveaux caractères de ligne ou même passer entre différents modes (DOS / UNIX / MAC).


0 commentaires

2
votes

La nouvelle ligne est en réalité 2 caractères distincts: LF CR (retour de ligne et retour au chariot). Mais vous sauriez que si vous mettez un point d'arrêt dans votre boucle. Maintenant, pour un crédit supplémentaire, combien d'octets à Unicode?


0 commentaires

2
votes

Windows utilise généralement \ r \ n code> pour la nouvelle ligne, c'est-à-dire des caractères ASCII 0x13 et 0x10.

suggère que vous prouvez cela vous-même en faisant cela: p>

Console.WriteLine("0x{0:x}", sr.Read());


0 commentaires

3
votes

Il y a un moyen plus facile de le faire. Faites tout le fichier * .txt sur un tableau de chaîne et mesurez-le:

int count = 0;

string[] Text = File.ReadAllLines(/*Path to the file here*/);

for (int i = 0; i < Text.Count(); i++)
{
        count += Text[i].Length;
}


0 commentaires