gpt4 book ai didi

c# - 在c#中查找csv或文本文件的分隔符

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:13 24 4
gpt4 key购买 nike

我想找到一个用于分隔 csv 或文本文件中的列的分隔符。

我正在使用 TextFieldParser 类来读取这些文件。

下面是我的代码,

String path = @"c:\abc.csv";
DataTable dt = new DataTable();
if (File.Exists(path))
{
using (Microsoft.VisualBasic.FileIO.TextFieldParser parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(path))
{
parser.TextFieldType = FieldType.Delimited;
if (path.Contains(".txt"))
{
parser.SetDelimiters("|");
}
else
{
parser.SetDelimiters(",");
}
parser.HasFieldsEnclosedInQuotes = true;
bool firstLine = true;
while (!parser.EndOfData)
{
string[] fields = parser.ReadFields();
if (firstLine)
{
foreach (var val in fields)
{
dt.Columns.Add(val);
}
firstLine = false;
continue;
}
dt.Rows.Add(fields);
}
}
lblCount.Text = "Count of total rows in the file: " + dt.Rows.Count.ToString();
dgvTextFieldParser1.DataSource = dt;

我不想根据文件类型手动传递分隔符,而是想从文件中读取分隔符,然后传递它。

我该怎么做?

最佳答案

数学上正确但完全无用的答案:这是不可能的。

实用的答案:有可能但是这取决于您对文件结构的了解程度。它归结为一堆假设,根据我们所做的假设,答案会有所不同。如果您不能做出任何假设,那么...请参阅数学上正确的答案。

例如,我们是否可以假设分隔符是以下集合中的一个或任何一个元素?

List<char> delimiters = new List<char>{' ', ';', '|'};

或者我们可以假设定界符产生的元素长度相等吗?

我们应该尝试找到一个由单个字符构成的分隔符还是一个单词可以是一个分隔符?

等等

根据这个问题,我假设这是第一个选项,并且我们有一组有限的可能字符,恰好其中一个是给定文件的定界符。

您如何计算每个此类字符的出现次数,并假设出现频率最高的就是那个字符?这是否足够严格,还是您需要比这更确定?

List<char> delimiters = new List<char>{' ', ';', '-'};
Dictionary<char, int> counts = delimiters.ToDictionary(key => key, value => 0);
foreach(char c in delimiters)
counts[c] = textArray.Count(t => t == c);

我不在电脑前,所以无法验证,但最后一步是从字典中返回,其是最大。

您需要考虑一种特殊情况,例如没有检测到定界符,两种类型的定界符数量相等等。

关于c# - 在c#中查找csv或文本文件的分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33445134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com