【问题标题】:Reading a delimited text file by line and by delimiter in C#在 C# 中按行和按分隔符读取分隔的文本文件
【发布时间】:2015-04-09 21:18:18
【问题描述】:

我很抱歉我发布了这个,这里有很多这样的问题,但我找不到特定于此的问题。

我有一个列表,每个项目都包含一个 DateTime、int 和一个字符串。我已成功将所有列表项写入以逗号分隔的 .txt 文件。 例如 09/04/2015 22:12:00,10,在 Stackoverflow 上发帖。

我需要逐行遍历文件,每一行从索引 0 开始,一直到索引 2。目前我可以调用索引 03,它返回文本文件中第二个列表项的 DateTime .该文件是逐行写入的,但我很难用分隔符和换行符将其读回。

对不起,如果我没有多大意义,我将不胜感激,谢谢。

【问题讨论】:

  • 使用 StreamReader,逐行读取,保留一个递增的整数,它将指向当前行并拆分字符串并使用元素。
  • @SurgeonofDeath 我已经实现了 i486 评论的代码作为解决我的问题的方法,但我想我稍后会更改为 StreamReader,谢谢你的时间。
  • 请注意,一次读取一行并以逗号分隔的幼稚解决方案,does not work 用于逗号分隔的文本文件。 CSV 文件可以在数据中包含逗号和换行符,可以包含 cmets,进行本地化,以及执行许多其他您不处理的事情。除了最琐碎的文字之外,您需要CSV parser

标签: c# loops


【解决方案1】:
string[] lines = File.ReadAllLines( filename );
foreach ( string line in lines )
{
  string[] col = line.Split(',');
  // process col[0], col[1], col[2]
}

【讨论】:

  • 为什么 'new char[] {','} ' - 只是 line.Split(',')
  • 其中一个覆盖允许使用字符串 - 例如 ',' 似乎对测试结果没有太大影响。
  • 我可能应该问你指的是什么网络版本。我可以确认 line.split(',') 确实有效。
  • @JamieNicholl-Shelley 好的,我终于理解你了。编辑了答案。
  • 很高兴我能帮上忙 :)
【解决方案2】:

您可以通过var lines = File.ReadAllLines(pathToFile); 一次读取所有行。然后您可以通过以下方式将每一行拆分为一个字段数组:

foreach (var line in lines) {
    String[] fields = line.Split(',');
}

如果您的文件中没有任何杂散逗号,并且唯一的逗号是真正的分隔符,则这意味着 fields 将始终是一个 3 元素数组,并且您的每个字段都是连续的。

【讨论】:

  • 顺便说一句,如果文件很大,使用 Streams 的@Surgeonofdeath 方法会更好。
  • 您好 DWright,感谢您的帮助,我想我会使用 Streams 但目前我的问题已解决,再次感谢!
【解决方案3】:

或者,您可以执行以下操作:

    public static List<Values> GetValues(string path)
    {
        List<Values> valuesCollection = new List<Values>();;

        using (var f = new StreamReader(path))
        {
            string line = string.Empty;
            while ((line = f.ReadLine()) != null)
            {
                var parts = line.Split(',');
                valuesCollection.Add(new Values(Convert.ToDateTime(parts[0]), Convert.ToInt32(parts[1]), parts[2]); 
            }
        }

        return valuesCollection;
    }

    class Values
    {
        public DateTime Date { get; set; }

        public int IntValue { get; set; }

        public string StringValue { get; set; }

        public Values()
        {
        }

        public Values(DateTime date, int intValue, string stringValue)
        {
            this.Date = date;
            this.IntValue = intValue;
            this.StringValue = stringValue;
        }
    }

然后您可以遍历值列表或集合并访问每个对象及其属性。例如:

Console.WriteLine(values.Date);
Console.WriteLine(values.IntValue);
Console.WriteLine(values.StringValue);

【讨论】:

    猜你喜欢
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2015-05-21
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多