如何在C#控制台应用程序中使用分隔符从txt文件中选择特定列

时间:2019-05-30 05:20:51

标签: c#

你好,我有一个数据(在txt文件中),其中包含140万行++,并且我需要根据ID分离数据。因此,如果数据中具有10个不同的ID,则控制台应用程序将创建10个不同的文件,每个文件包含具有相同ID的数据。

我的问题是,提供给我的数据并不是要插入的所有列,所以如果数据有10列,我只需要占用8列

这是我用来将数据写入并将ID分离为具有不同ID的文件的代码

  string appPath = AppDomain.CurrentDomain.BaseDirectory;
  string dirTxt = appPath + "VA_" + tglskrg;
  string dirZip = appPath + "VA_" + tglskrg + "\\ZIP";

 var writers = new Dictionary<string, TextWriter>();
            string header = "COMPANY CODE;CUSTOMER NUMBER;CUSTOMER NAME;INSERT DATE;TRANSACTION ID;TRANSACTION AMOUNT;ADMIN FEE;TRANSACTION REF;FLAG STATUS;TRANSACTION STATUS"; //its still 10 columns because my code still write all the columns in the old data .
            string inputFile = appPath + "va_txn_success_daily_"+tglkemarin+".txt";

            string outputPath = dirTxt;
            string outputPathh = dirZip;
            TextWriter writer;
            using (var reader = File.OpenText(inputFile))
            {
                //skip header
                reader.ReadLine();

                try
                {
                    while (!reader.EndOfStream)
                    {
                        //read one line and separate key and value
                        var line = reader.ReadLine();
                        var separatorIndex = line.IndexOf(';');
                        var id = line.Substring(0, separatorIndex);
                        var value = line.Substring(separatorIndex - 5);

                        //get a writer or create one
                        if (!writers.TryGetValue(id, out writer))
                        {
                            writer = File.CreateText(dirTxt + "\\" + "va_txn_success_" + id + "_" + tglskrg + ".txt");
                            writer.WriteLine(header);
                            writers.Add(id, writer);

                        }

                        //write the line to the correct file
                        writer.WriteLine(value);


                    }
                }
                finally
                {
                    reader.Close();                    
                    //dispose all the writers
                    foreach (var writerr in writers.Values)
                    {
                        writerr.Dispose();
                    }
                }

我无法显示数据,因为数据受限制

如果我能举个例子,那么会

COMPANY CODE;CUSTOMER NUMBER;CUSTOMER NAME;INSERT DATE;TRANSACTION ID;TRANSACTION AMOUNT;ADMIN FEE;TRANSACTION REF;FLAG STATUS;TRANSACTION STATUS;
A;01;Ricky;15-Jan;ABC01;1000;0;BCD123;Success;Trans success
B;02;John;15-Feb;ABC02;1500;1000;BCC122;Success;Trans success
A;02;Ricky;1-Jan;Abc03;2000;0;BCC;123;Success;Trans success

因此它将为A公司代码和B公司代码创建2个文件

我只想获取公司代码,客户编号,客户名称,插入日期,交易金额,交易参考,标志状态和交易状态

谢谢

1 个答案:

答案 0 :(得分:1)

将该行的项目读入数组。最简单的方法:String.Split

string[] items = String.Split(";");

然后您就可以访问各列;

string company = item[0};
string customer = item[1];
....