为什么解析CSV或TSV文件时只能得到部分结果?
本文关键字:结果 CSV 文件 TSV 为什么 | 更新日期: 2023-09-27 18:04:28
我试图从100行CSV文件中获得第二个值。我得到了前42个值,然后它停止了…没有错误消息,也没有错误处理。我很困惑,在一个时间轴上。它也会对TSV文件执行此操作,但会给出前43个结果。如果你觉得很奇怪,请告诉我。
我使用streamreader,将每行读取为字符串数组,分割数组并将第二个值添加到列表中…
string path = @"C:'Users'dave'Desktop'codes'testfile.txt";
StreamReader sr = new StreamReader(path);
List<string> stkno = new List<string>();
foreach (var line in path)
{
string s = sr.ReadLine();
string[] words = s.Split(',');
stkno.Add(words[1]);
}
var message = string.Join(",", stkno.ToArray());
MessageBox.Show(message);
您的path
变量是一个字符串。这意味着当你对它进行foreach
时,你会得到一个字符序列 - 'C'然后':'然后'''等等。我不认为那是你想要做的……
这里有一个使用File.ReadLines
的更简单的方法:
string path = @"C:'Users'dave'Desktop'codes'testfile.txt";
List<string> stkno = (from line in File.ReadLines(path)
let words = line.Split(',')
select words[1]).ToList();
或:
string path = @"C:'Users'dave'Desktop'codes'testfile.txt";
List<string> stkno = File.ReadLines(path)
.Select(line => line.Split(',')[1])
.ToList();
如果你正在使用。net 3.5并且你不介意一次读取整个文件,你可以使用File.ReadAllLines
来代替。
您意外地遍历了文件路径中的字符数,而不是字符串中的行数。这个更改应该修复:
string path = @"C:'Users'dave'Desktop'codes'testfile.txt";
StreamReader sr = new StreamReader(path);
List<string> stkno = new List<string>();
while (sr.Peek() >= 0)
{
string s = sr.ReadLine();
string[] words = s.Split(',');
stkno.Add(words[1]);
}
var message = string.Join(",", stkno.ToArray());
MessageBox.Show(message);
这个怎么样:
string path = @"C:'Users'dave'Desktop'codes'testfile.txt";
var secondWords = from line in File.ReadAllLines(path)
let words = line.Split(',')
select words[1];
var message = string.Join(",", secondWords.ToArray());
我想你的意思是:
string path = @"C:'Users'dave'Desktop'codes'testfile.txt";
StreamReader sr = new StreamReader(path);
List<string> stkno = new List<string>();
string s;
while(s = sr.ReadLine() != null)
{
string[] words = s.Split(',');
stkno.Add(words[1]);
}
var message = string.Join(",", stkno.ToArray());
MessageBox.Show(message);