【问题标题】:How can I process this file in C#?如何在 C# 中处理此文件?
【发布时间】:2011-07-30 12:27:05
【问题描述】:

我有一个包含 数百个条目 格式的文本文件,我需要根据您的建议在数据网格或其他“正确格式化”的用户友好控件上显示此文件。 (我的意图是将其导出到 excel 虽然不是最佳选择以进行进一步处理。所有列都是以毫秒为单位的值,所以大多数情况下这些值在 3 小时内都很大,所以我需要将它们转换为小时/分钟/秒。)完成此任务的最佳方法是什么?这可以用 StreamReader 完成吗?转换是否可以在代码中进行,因此无需导出到 excel?有样品吗?谢谢!

  ENTRY DAY ENTRY TIME  IN.WORK   TEST %     TRY CORRER     CORTA   CICLO MAQUI
    O0.TXT            
      11/07/28  13:39:13        0        0     105       0       0       0       0
    O0.TXT            
      11/07/20  00:00:00        0        0   19145       0       0       0       0
    O0.TXT            
      11/07/19  15:04:10        0        0   32151       0       0       0       0

我想这样格式化:

FILE   ENTRY DAY ENTRY TIME  IN.WORK   TEST %   TRY    CORRER   CORTA   CICLO   MAQUI
O0.TXT 11/07/28  13:39:13        0        0     105       0       0       0       0
O0.TXT 11/07/20  00:00:00        0        0   19145       0       0       0       0
O0.TXT 11/07/19  15:04:10        0        0   32151       0       0       0       0
O0.TXT 11/07/07  05:22:40        0        0     508       0       0       0       0

我尝试使用:

string fileName = "Myfile.txt";
StreamReader sr = new StreamReader(fileName);
string[] delimiter = new string[] { " " };
while (!sr.EndOfStream)
{
     string[] lines = sr.ReadLine().Split(delimiter, StringSplitOptions.RemoveEmptyEntries);
     foreach (string line in lines)
     { 

........

但我根本无法保持我想要的格式,也无法将其加载到数据网格等中。

【问题讨论】:

  • 可能是用制表符 (\t) 分隔?
  • 如果您想使用 excel,为什么不尝试通过在列名之间添加逗号将其转换为 csv 并通过 excel 导入?
  • Morpheus excel 部分是因为我想不出更好的处理文件的方法,如果可能的话,我希望尽可能远离 excel。谢谢

标签: c# datagrid text-parsing


【解决方案1】:
string fileName = "Myfile.txt";

string[] delimiter = new string[] { " " };

List<string[]> rows = new List<string[]>();

string[] liens = File.ReadAllLines(fileName);

foreach (string line in liens)
{
    rows.Add(line.Split(delimiter, StringSplitOptions.RemoveEmptyEntries));
}

//Now if you want to display them each one row item separated by tab "`\t"` or csv `","`
string separator = "\t";

List<string> output = new List<string>();

foreach (string[] row in rows)
{
    output.Add(string.Join(separator, row));
}

string newFile = "result.txt";
File.WriteAllLines(newFile, output.ToArray());//save the output to new file.

【讨论】:

  • 您遇到的错误是什么?还有你用的.net版本是什么?
  • 好的,对不起,我只是没有检查错别字,但是我修复并更新了答案,首先string[] row in rows而不是string row in rows,第二个string newFile而不是strgin newFile,第三个File.WriteAllLines(newFile, output.AotArray()
  • 它没有出错,我只需要弄清楚如何按照原始请求中的指示将两行合并为一条。
  • string.Join 的实际作用是像我们在此处的行中所做的那样合并字符串调用 join 数组,例如 string merged = string.Join( " ", line1, line2); 将合并分隔它们的两行与 " "
【解决方案2】:

一切都解决了吗?例如,日期是否总是 6 个字符和 8 个字符长(或任何情况)?如果是这样,我将拆分“\r\n”而不是“”,然后单独处理每一行。你可以这样做:

string fileName = "Myfile.txt";
StreamReader sr = new StreamReader(fileName);
string[] delimiter = new string[] { "\r\n" };
while (!sr.EndOfStream)
{
    string[] lines = sr.ReadLine().Split(delimiter, StringSplitOptions.RemoveEmptyEntries);
    foreach (string line in lines)
    { 
        date = line.Substring(6, 8);
        // Do the other processing here.
    }
}

当然,你必须想出一些你需要处理哪些行的逻辑。

【讨论】:

  • @ pauleck1 是的,ti 在这里看起来就是这样,它总是这样出现
猜你喜欢
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多