0

私は3つのカウンターを実行しています。1つは文字の合計量を返し、もう1つは'|'の数を返します。.txtファイルの文字(合計)。そして、私のテキストファイルにいくつの別々の行があるかを読むための1つ。カウンターが間違っていると思いますが、よくわかりません。私のテキストファイルには余分な'|'があります charsですが、それは後で修正する必要があるバグです...

The Message Boxes show  
"Lines = 8"   
"Entries = 8"   
"Total Chars = 0"  

それが役立つかどうかはわかりませんが、.txtファイルはストリームライターを使用してコンパイルされており、出力を作成するためにdatagridviewを文字列に保存しています。これらの機能はすべて問題ないようです。

これが私が読んでいるテキストファイルのコピーです

Matthew|Walker|MXW320|114282353|True|True|True  
Audrey|Walker|AXW420|114282354|True|True|True    
John|Doe|JXD020|111222333|True|True|False  
||||||  

そしてここにコードがあります。

    private void btnLoadList_Click(object sender, EventArgs e)
    {
        var loadDialog = new OpenFileDialog
            {
                InitialDirectory = Convert.ToString(Environment.SpecialFolder.MyDocuments),
                Filter = "Text (*.txt)|*.txt",
                FilterIndex = 1
            };
        if (loadDialog.ShowDialog() != DialogResult.OK) return;
        using (new StreamReader(loadDialog.FileName))
        {
            var lines = File.ReadAllLines(loadDialog.FileName);//Array of all the lines in the text file
            foreach (var assocStringer in lines)//For each assocStringer in lines (Runs 1 cycle for each line in the text file loaded)
            {
                var entries = assocStringer.Split('|'); // split the line into pieces (e.g. an array of "Matthew", "Walker", etc.)
                var obj = (Associate) _bindingSource.AddNew();
                if (obj == null) continue;
                obj.FirstName = entries[0];
                obj.LastName = entries[1];
                obj.AssocId = entries[2];
                obj.AssocRfid = entries[3];
                obj.CanDoDiverts = entries[4];
                obj.CanDoMhe = entries[5];
                obj.CanDoLoading = entries[6];
            } 
      }
   }

ここでバグを見つけてください。フォーマットがずさんな場合は申し訳ありませんが、私は独学で、クラスはありません。追加のアドバイスは歓迎されます。必要に応じて正直で厳しくしてください。感情を傷つけることはありません。

要約すれば

このプログラムが、使用しているテキストファイルから正しい値を読み取らないのはなぜですか?

4

1 に答える 1

1

あなたがやろうとしていることを正確に理解できるかどうかは完全にはわかりません.わかります。

var lines = File.ReadAllLines(load_dialog.FileName);
int lineCount = lines.Count();
int totalChars = 0;
int totalPipes = 0; // number of "|" chars

foreach (var s in lines)
{
    var entries = s.Split('|');  // split the line into pieces (e.g. an array of "Matthew", "Walker", etc.)
    totalChars += s.Length;   // add the number of chars on this line to the total
    totalPipes = totalPipes + entries.Count() - 1; // there is always one more entry than pipes
}

Split()が行っているのは、行全体を文字列内の個々のフィールドの配列に分割することだけです。フィールドではなくパイプの数だけを気にしているように見えるので、フィールドの数を取り、1 を引いてパイプの数を決定する以外に、私はそれをあまり処理していません (末尾のパイプがないため)。各行で)。

于 2012-12-13T03:06:44.803 に答える