csv 文字列の配列を検索し、データの特定のビットを 1 行に書き込む簡単な方法はありますか。現在、csv ファイルを検索し、TextBox からの 2 つのユーザー入力に基づいて特定のデータを引き出し、これを並べ替えて別の csv ファイルに書き込みます。
本来はデバイス名が同じなら同じ行にデータを書き込んでほしい。デバイスが「dev1 id1」と呼ばれ、別のデバイスが「dev1 id2」と呼ばれるとしましょう。(現在のように)両方を別々の行に書くのではなく、1つの結合された行に書きたいと思います。何かのようなもの:
dev1,id1,id2
それ以外の:
dev1,id1
dev1,id2
for ループと if ステートメントを使用してみましたが、すぐに面倒です。ベローは私の現在のコードです(仕事上の理由でタイプミスがあった場合は申し訳ありませんが、再入力する必要がありました)。
StreamWriter sw = new StreamWriter(@"c:\test.csv");
StreamReader sr = new StreamReader(@"c:\rtest.csv");
List<string> list = new List<string>();
string line = "Station,Device,Key,AOR";
string sta = textBox1.Text;
string[] devs = richTextBox1.Text.Split(',').Select(dev => dev.Trim()).ToArray();
string[] sort,strs;
bool cont;
sw.WriteLine(line);
while (!sr.EndOfStream)
{
strs = line.Split(',');
cont = (devs.Any(s => strs[1].IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0));
if (strs[2].ToString() == sta && cont ==true)
{
list.Add(line.ToString());
}
line = sr.ReadLine();
}
sort = new string[list.Count];
list.CopyTo(sort);
Array.Sort(sort);
foreach (string var in sort)
{
strs = var.Split(',');
sw.WriteLine(string.Format("{2},{1},{0},{3}", strs[0], strs[1], strs[2], strs[3]));
}
sw.Close();
if (File.Exists(@"c:\test.csv")
{
Process.Start(@"c:\test.csv");
}
私の質問が理解できることを願っています、ありがとう。