0

我很难想出一个实现文件导入类的好方法,

我希望它能够读取任何文件,然后根据行内容的分隔符,确定文件的结构(不是类型结构),

例如,假设我有一个名为 A.txt 的文件

该文件包含由 , 分隔符分隔的数据行,

如果我用','分割结果将是一个字符串数组但是,我如何动态确定分隔符,然后将输出设置为列名?

说如果 a.txt 的第一行是“1,2,3,4,5”

输出应该是

delimter : ","
column[0] = "1"
column[1] = "2"
column[2] = "3"
column[4] = "4"
column[5] = "5"

有没有人有什么好主意?而且我不确定,但是是否有可能以某种方式神奇地确定数据类型取决于字符串的值是什么,如果不是这样也没关系,但我认为无论如何我都想问。

谢谢

4

4 回答 4

1

如果您有一个符号数组(可能是分隔符)和第二个符号数组(可能不是分隔符),那么一切都很容易。只需从 delimitsArray 中找到第一个符号,然后使用它进行拆分。

如果分隔符之间的部分具有相等的长度,那么这也很容易。

如果零件和分界线可能是任何的,则没有办法将它们与另一个区分开来。

于 2012-10-19T13:52:48.533 回答
1

如果您知道数据类型并且分隔符是单个字符来确定分隔符,您可以执行以下操作(伪代码):

char FindDelimiter(string firstLine)
{
    for (int i = 1; i < firstLine.Length; i++)
    {
        if(!CanBeParsedAsKnownDataType(firstLine.SubString(0,i))
        {
            // this one cannot be parsed as a known datatype anymore
            // so it must be the delimiter 
            return firstLine[i];
        }
    }

    // if we reach this, nothing was found
    return '';
}   

请注意,这仅适用于数字等数据类型,其中实际值的子字符串仍可被解析为数据类型。

于 2012-10-19T13:54:51.437 回答
1

他们没有可用的魔法。您所能做的就是遍历第一行并找出最常出现的字符。然后将此列表与可能的候选分隔符列表进行比较,找出哪个最先出现。

这是一个代码示例,它返回一个字符串并对该字符串进行一些分析。也许这是您的“魔术代码”的起点:

var line = "1,2,3,4,5,6";
var analysis = line.GroupBy(c => c);
var results = analysis.OrderByDescending(group => group.Count())
                      .ThenBy(group => group.Key)
                      .Select(group => "The character \""
                                       + group.Key
                                       + "\" appears "
                                       + group.Count()
                                       + " time"
                                       + (group.Skip(1).Any() ? "s" : String.Empty)
                                       + ".");
于 2012-10-19T13:55:02.780 回答
0

你可以试试这个。

 public DataTable GetDataTableFromTextFile(string filepath) 
    {
                                string line;
                                DataTable dt = new DataTable();                         
                                using (TextReader tr = File.OpenText(filepath))
                                {
                                    while ((line = tr.ReadLine()) != null)
                                    {
                                        string[] items = line.Split('\t',":",";","=");
                                        if (dt.Columns.Count == 0)
                                        {
                                            dt.Columns.Add(new DataColumn("FirstColumn", typeof(string)));
                                            dt.Columns.Add(new DataColumn("SecondColumn", typeof(string)));
                                            dt.Columns.Add(new DataColumn("ThridColumn", typeof(string)));

                                        }

                                        if (items.Length > 0 && !string.IsNullOrWhiteSpace(items[0].ToString()))
                                        {
                                            dt.Rows.Add(items);                                       
                                        }
                                    }
                                }
    return dt;

}
于 2012-10-19T14:03:22.280 回答