-1

C#について教えてください。CSV ファイルを開いて配列に保存する関数を C# で作成しようとしています。

FileStream fileStream = new FileStream(guid.ToString(), FileMode.Open);
for (int i = 1; i > 200; i++) // it checks the first 200 lines
{
    int j = 0;
    string[] str = new string[j];
    do
    {                
        // saving each character to the variable until comma is found

    } while(str == '\n'); // read each character in a for loop until new line character found
}

助けてもらえますか?

4

4 に答える 4

3

CSV を手動で解析するのは、実際にはかなりトリッキーです。を再利用した方がよい場合があります(アセンブリTextFieldParserへの参照を追加します)。Microsoft.VisualBasic

using Microsoft.VisualBasic.FileIO;

....

string[,] parsedCsv;
List<string[]> csvLines = new List<string[]>();
TextFieldParser parser = new TextFieldParser(new FileStream(guid.ToString(), FileMode.Open));
parser.Delimiters = new string[] { "," };
parser.TextFieldType = FieldType.Delimited;
int maxLines = 200, lineCount = 0;

try
{
    while (!parser.EndOfData && lineCount++ < maxLines)
    {
        csvLines.Add(parser.ReadFields());
    }
}
catch (MalformedLineException)
{
    Console.WriteLine("Line Number: {0} Value: {1}", parser.ErrorLineNumber, parser.ErrorLine);
    return;
}

parsedCsv = new string[csvLines.Count, csvLines[0].Length];

for (int i = 0; i < csvLines.Count; i++)
{
    for (int j = 0; j < csvLines[i].Length; j++)
    {
        parsedCsv[i, j] = csvLines[i][j];
    }
}

ここでは、出力が文字列の 2 次元配列になると想定しています。特に、各行が同じではない状況に対処する必要がある場合は、目的に応じてこのコードを調整する必要がある場合があります。フィールドの数 (可能性は低いかもしれませんが、それでも)。

本当に便利なのTextFieldParserは、さまざまな種類の区切り記号に対応できることです。parser.Delimiters = new string[] { "\t" };たとえば、 を設定すると、この同じコードでタブ区切りのテキストを解析できます。

于 2012-11-22T20:16:30.793 に答える
3

このようなもの:

using (StreamReader r = new StreamReader(guid.ToString()))
{
    string line;
    int linesCount;
    ArrayList result = new ArrayList();
    while ((line = r.ReadLine()) != null && linesCount++ <= 200)
    {
         result.AddRange(line.Split(','));
    }
}
于 2012-11-22T19:57:38.243 に答える
1

どうですか:

string[] lines = File.ReadAllLines(path);
if(lines.Length >= 200){
    for(int i = 0; i < 200; i++){
          string[] str = lines[i].Split(',');
          //do something here
    }
}
于 2012-11-22T19:52:34.500 に答える
0

string.Split(',') 拡張メソッドを使用するだけです。

using (StreamReader streamReader = new StreamReader(File.OpenRead(guid.ToString())))
{
    for (int i = 0; i <= 200; ++i)
    {    
        string[] str = streamReader.ReadLine().Split(',');
    }
}

Split 拡張メソッドは、コンマで区切られた個々の値の文字列配列を返します。

于 2012-11-22T19:50:30.523 に答える