如何在C#中处理此文件?

时间:2011-07-30 12:27:05

标签: c# datagrid text-parsing

我有一个文本文件,其中数百个条目格式如下,我需要在数据网格上显示此文件,或者根据您的建议在“格式正确”的其他用户友好控件中显示。 (我的目的是然后将它导出为ex​​cel 不是最佳选择,但进行进一步处理。所有列都是以毫秒为单位的值,因此大多数时候这些值都非常大,最多可达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)
     { 

........

但是我根本无法保存我想要的格式,也没有将它加载到数据网格等等。

2 个答案:

答案 0 :(得分:2)

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.

答案 1 :(得分:0)

一切都固定好了吗?例如,日期总是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.
    }
}

当然,您必须为需要处理的行提供一些逻辑。