0
votes

Comment utiliser StreamReader pour ajouter des lignes divisées à un dictionnaire?

J'essaie de lire un fichier .txt avec StreamReader, Split Lines et ajoutez-les à un dictionnaire, mais quand je le débogé, cela ne fonctionne pas car la première ligne est null et cela ne va pas plus loin. Comment définir la chaîne de la chaîne pour qu'il fonctionne?

        StreamReader sr = new StreamReader(@"N:\Desktop\krew.txt");
        StreamWriter sw = new StreamWriter(@"N:\Desktop\newKrew.txt");
        Dictionary<string, string> dict = new Dictionary<string, string>();
        string fullLine = "";


        while (fullLine != null)
        {
            fullLine = sr.ReadLine();
            string[] wholeLine = fullLine.Split('\t');
            dict.Add(wholeLine[0], wholeLine[1]);


4 commentaires

Euh, comment FullLine


readline () renvoie NULL uniquement lorsqu'il atteint la fin du fichier. Votre fichier est content et vous n'avez pas typographique le chemin? Votre programme est en mesure d'accéder à votre lettre de lecteur différente?


Il pourrait simplement être plus facile d'utiliser fichier.readalllines (..) au lieu d'un streamrireder


Et si vous avez l'intention de continuer à utiliser StreamReder, jetez un coup d'œil à la Microsoft Exemple , qui utilise un en utilisant .


6 Réponses :


2
votes

Vous pouvez essayer linq et let .net ouverte (et Disposer ) flux S, lecteur s pour Vous xxx

pour ajouter dans Dictionnaire existant: xxx

si vous insister Sur StreamReder , vous pouvez implémenter un simple pour boucle: xxx


0 commentaires

1
votes

Vous feriez mieux d'écrire la boucle comme ceci: xxx

Comme vous avez écrit la boucle en ce moment, FullLine deviendra NULL à la fin de le fichier, puis le FullLine.split ('\ t'); lancera un NullReferenceException .

Je soupçonne que c'est ce que tu veux dire quand tu veux Dites première ligne est null et cela ne va pas plus loin . Il ne peut pas réellement être la ligne première causer le problème, puisque vous initiez FullLine à "", mais je pense que c'est la question sous-jacente.


3 commentaires

Un .txt ne peut pas avoir de vraies valeurs «null» entre les lignes. Corrigez-moi si je me trompe mais ne sont-ils pas lus en as / n avec StreamReader?


@xtwistedx: fichier ne peut pas avoir null lignes mais vide ""


@xtwistedx comme La documentation pour streamreader.readline () états: La valeur renvoyée est NULL si la fin du flux d'entrée est atteinte , voilà comment la boucle détecte la condition EOF .



1
votes

Utilisez la méthode .Pek () dans votre boucle tandis que vous pouvez lire à la fin du fichier. Il devrait dépasser votre première ligne est vide.

  • null n'est pas la même chose que "" p> li>

  • Peek () Vérifiera le caractère suivant et la ligne est vide code> il retournera "" code>. P>. li>

  • Si vous avez des lignes sur la ligne 2 à X à x, les lignes vides ne sont pas nulles, donc .Pek () retournera -1. Découvrez la documentation sur elle. P> li> ul> blockQuote>

    .Peek () https://docs.microsoft.com/en-us/dotnet/api/system.io.streeamreader.peek?view=netFramework-4.8 p>

    //Doing it in a Using statement to properly dispose of the StreamReader
    using (StreamReader sr = new StreamReader(path)) 
                {
    
                    while (sr.Peek() > -1) 
                    {
                        Console.WriteLine(sr.ReadLine());
                    }
                }
    


0 commentaires

0
votes

Changer votre code comme celui-ci

while ((fullLine = sr.ReadLine()) != null)
        {
            string[] wholeLine = fullLine.Split('\t');
            dict.Add(wholeLine[0], wholeLine[1]);
        }


0 commentaires

2
votes

Essayez d'utiliser le ci-dessous. Ceci définit la variable de ligne à chaque ligne du fichier xxx


2 commentaires

Pourquoi ce travail ne fonctionne-t-il pas avec l'attribution de FullLine = Sr.Readline (); et fait sans elle?


@Wurfv_ Vous devez affecter la variable à l'intérieur de la condition de boucle tandis que. De cette façon, il l'établit avant qu'il ne vérifie s'il est null



0
votes

Si vous n'êtes pas entièrement dépendant de avoir utiliser streamreader .. xxx


0 commentaires