2

2行を含むファイルがあります。そして、どの行にdoubleパラメーターがありますか。ファイルから両方の行を読み取り、それらを double の配列に保存したいと考えています。以下の C# コードを使用しましたが、動作しません。コードを実行した後、何も読み取らず、配列は空です。誰が私がどこで間違ったのか知っていますか? 手伝ってくれてありがとう 。

    private FileStream input;
    double[] arr;
    int i = 1;

    input = new FileStream(Application.StartupPath+"\\City.txt", FileMode.Open, FileAccess.Read);
    StreamReader reader = new StreamReader(input); 

    while (!reader.EndOfStream)
        {
            arr[i] = Convert.ToDouble(reader.ReadLine());
            i++;
        }

    reader.Close();
4

5 に答える 5

1

このアプローチを試してください

using (StreamReader sr = File.OpenText(Application.StartupPath+"\\City.txt")) 
{
    string line;
    // Read and display lines from the file until the end of  
    // the file is reached. 
    while ((line = sr.ReadLine()) != null) 
    {
         arr[i] = Convert.ToDouble(line);
         i++;
    }
}

C# の配列はゼロベースであるため、少なくとも初期化する必要があり、ゼロにする必要がありarrます。そして、(この場合)のような一般的なコレクションを使用することをお勧めします。arr = new double[_size]iList<T>List<double>

于 2013-07-02T19:52:51.147 に答える
0

問題はwhile (!reader.EndOfStream)、最初に読み取ったときの位置がファイルの最後にあるためです。arr[i]これは、配列を初期化していないために行が失敗するはずであるという事実によって固められています(実際には、コンパイルさえすべきではありません...)。では、これはどうですか:

double[] arr = new double[2];
...

reader.BaseStream.Position = 0;
while (!reader.EndOfStream)
{
    arr[i] = Convert.ToDouble(reader.ReadLine());
    i++;
}

ただし、より単純なアプローチは次のようになります。

var arr = new List<double>();
var lines = File.ReadAllLines(Application.StartupPath+"\\City.txt");
foreach (var l in lines)
{
    arr.Add(Convert.ToDouble(l));
}
return arr.ToArray();
于 2013-07-02T19:51:44.237 に答える
0

別のオプションは、ファイル サイズが小さいことを考慮して、File.ReadAllLinesを使用することです。

    string[] stringDoubles = File.ReadAllLines(path, Encoding.UTF8);
    for(int i=0;i<stringDoubles.Length;i++)        
        arr[i] = Convert.ToDouble(stringDoubles[i]);
于 2013-07-02T19:53:24.960 に答える