Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 区分制表符分隔、空格分隔和逗号分隔的流_C#_Streamreader - Fatal编程技术网

C# 区分制表符分隔、空格分隔和逗号分隔的流

C# 区分制表符分隔、空格分隔和逗号分隔的流,c#,streamreader,C#,Streamreader,我正在使用以下代码读取以制表符分隔的流 using (StreamReader readFile = new StreamReader(path)) { string line; string[] row; while ((line = readFile.ReadLine()) != null) { row = line.Split('\t'); parsedData.Add(row); } } 但是,有时用户可能会提供一

我正在使用以下代码读取以制表符分隔的流

using (StreamReader readFile = new StreamReader(path))
{
    string line;
    string[] row;
    while ((line = readFile.ReadLine()) != null)
    {
        row = line.Split('\t');
        parsedData.Add(row);
    }
}
但是,有时用户可能会提供一个空格分隔或逗号分隔的文件。如何自动检测分隔符,而不必更改
row=line.Split('\t')
行=行分割(“”)
row=line.Split(',')


谢谢。

你无法在手前区分它们

您所能做的是尝试对所有这些进行拆分:

row = line.Split('\t', ' ', ',');

当然,这假定分隔符之间的数据不包含分隔符。

您可以使用to string.Split方法按字符数分割数据

var delims = new [] {',', '\t', ' ' };  
var result = line.Split(delims, StringSplitOptions.RemoveEmptyEntries);
或者你可以使用正则表达式

var result = Regex.Split(line, @"[,\t ]+")

您必须定义什么是分隔符以及如何检测它。如果您说:“文件的分隔符是我在第一行遇到的第一个不带引号的空白字符”,那么您可以读取第一行并确定分隔符。然后可以将其传递给
.Split()
方法。

如果使用了其他格式之一,数据是否包含任何其他分隔符?也就是说,如果标签分隔文件可以包含Lastname、FirstName\tAge。。。哪个同时包含空格和逗号?不。整个文件将具有相同的分隔符。可能不清楚。抱歉。如果文件只是用标签隔开,内容可能是:ID\tAge\t15 the Street,London,England\tBloggs,Fred。因此,您有分隔ID、年龄、地址、名称的选项卡,但地址和年龄在其内容中同时包含空格和逗号?表单只需要数字数据文件。所以,不。好吧,那会让生活变得更轻松,下面你有一些好的答案!
row = line.Split(new char[]{' ', ',', '\t'}, StringSplitOptions.RemoveEmptyEntries);