c#将文件从一种格式转换为另一种格式

时间:2011-02-03 22:58:44

标签: c# .net

我有一堆需要转换的文件。起始文件如下所示:

Well ID,Error code,Sample Barcode
A1,0,THC_CAL1
B1,0,THC_CAL2
C1,1,THC_CAL3
D1,0,THC_CAL4
E1,0,THC_QC1
F1,0,THC_QC2
G1,0,THC_QC3
H1,0,THC_QC4
A2,0,BLANK0609
B2,0,AA178121
C2,0,CC37815
D2,0,BLANK0610
E2,0,CC37819
F2,0,N150680
G2,0,BLANK0611
H2,0,AA127900
A3,0,AA26940
B3,0,BLANK0612
...........

输出需要如下所示:

A01 THC_CAL1
B01 THC_CAL2
D01 THC_CAL4   //please note that c1 is gone since it did not have a 0 in the middle column
E01 THC_QC1
F01 THC_QC2
G01 THC_QC3
H01 THC_QC4
A02 BLANK0609
B02 AA178121
C02 CC37815
D02 BLANK0610
E02 CC37819
F02 N150680
G02 BLANK0611
H02 AA127900
A03 AA26940
B03 BLANK0612
H10 BLANK0234 //please notice that there is H10 and not H010

将此文件读入变量然后将其输出到新文件中的最佳方法是什么?我应该逐行阅读,还是应该将其读入数据表?

4 个答案:

答案 0 :(得分:2)

我会一次读取一行文件并检查这个正则表达式:

^([A-Z]{1})([0-9]{1}),0,([A-Z0-9_]+)$

如果该行匹配,我会使用正则表达式组将新格式输出到新文件。 (我确定它不是最好的正则表达式)

基本上,这是你需要做的,虽然我不清楚你的例子中的最后一行输出来自哪里。

using (StreamWriter writer = new StreamWriter("out.out")) // file to write to
            {
                using (StreamReader reader = new StreamReader("input.dat")) //file to read from
                {
                    Regex regex = new Regex(@"^([A-Z]{1})([0-9]{1}),0,([A-Z0-9_]+)$");
                    string line;
                    while (reader.Peek() > 0)
                    {
                        line = reader.ReadLine();
                        if (regex.IsMatch(line))
                        {
                            writer.WriteLine(string.Format("{0}0{1} {2}", regex.Match(line).Groups[1], regex.Match(line).Groups[2], regex.Match(line).Groups[3]));
                        }
                    }

                }
            }

答案 1 :(得分:1)

使用StreamReader读取一行一行。解析您需要的信息。构造新行并使用StreamWriter写出另一个文件。一次完成这一行。

答案 2 :(得分:0)

使用OLEDB读入数据表:

http://www.switchonthecode.com/tutorials/csharp-tutorial-using-the-built-in-oledb-csv-parser

使用OLEDB写入带制表符分隔的文件(大约一半):

http://support.microsoft.com/kb/306023

不要让“Excel”部分抛出你... Excel使用相同的提供程序(OleDb)作为文本文件。您只需要为文本文件构建正确的连接字符串:

http://www.connectionstrings.com/textfile

OleDb提供商很开心。

答案 3 :(得分:0)

棘手的部分是编写可靠的映射规则,并且没有任何内容可以帮助您。有很多模式匹配&要使用的转换实用程序,但对于这个简单的东西,.Net 3.0&核心库包含足够多的工具来验证,格式化,过滤和排序您需要的任何方式。

所以我会构建类型来明确表示数据。将每一行解析为您的类型的实例。创建一个.ToNewType()方法或NewTypeClass(oldTypeInstance),其关注点是从旧格式映射到新格式。

一旦有了List,很容易将其保存到文件中。