将GZip压缩文件读入datatable,然后将此数据解析为另一个数据表

时间:2017-08-08 08:03:53

标签: c# parsing datatable

我有一个应用程序,它将txt文件读取并解析为数据表(稍后上传)。其中一些文件是压缩的(GZip)。我已经知道将压缩文件识别并读取到具有单行的数据表中(基本上是文件的再现)。我现在需要做的是将这些数据(在“|”上)解析为另一个数据表(如果可能的话,在同一个数据表中就地解析)。

    var ReadTable = new DataTable();
                    ReadTable.Columns.Add("Col1");
                    ReadTable.Columns.Add("Col2");
                    ReadTable.Columns.Add("Col3");
                    ReadTable.Columns.Add("Col4");
                    ReadTable.Columns.Add("Col5");

                    var ZipReadTable = new DataTable();
                    ZipReadTable.Columns.Add("ZipCol1");

                    if (isZip == false)
                    {
                        TextFieldParser parser = new TextFieldParser(FileLocationNameOriginal);
                        parser.TextFieldType = FieldType.Delimited;
                        parser.SetDelimiters("|");
                        //Read and parse all data in the file into a datatable
                        while (!parser.EndOfData)
                        {
                            ReadTable.Rows.Add(parser.ReadFields());
                        }
                        parser.Close();
                    }
                    else
                    {
                        using (Stream fileStream = File.OpenRead(FileLocationNameOriginal),
                            zippedStream = new GZipStream(fileStream, CompressionMode.Decompress))
                        {
                            using (StreamReader reader = new StreamReader(zippedStream))
                            {
                                string line;
                                while ((line = reader.ReadLine()) != null)
                                {
                                    ZipReadTable.Rows.Add(reader.ReadLine());
                                }
                            }
                        }
                    }

我已经尝试过将数据表再次转换为字符串,但是TextFieldParser没有使用它(我认为它只用于读取文件?)。 StreamWriter是我应该使用的吗?在此先感谢StackOverFlow!

1 个答案:

答案 0 :(得分:0)

我找到了一个相当简单的解决方案:

    var ZipReadTable = new DataTable(); 
        ZipReadTable.Columns.Add("ZipCol1");

        using (Stream fileStream = File.OpenRead(FileName), 
            zippedStream = new GZipStream(fileStream, CompressionMode.Decompress))
        {
            using (StreamReader reader = new StreamReader(zippedStream))
            {
                while (!reader.EndOfStream)
                {
                    ZipReadTable.Rows.Add(reader.ReadLine());
                }
            }
        }

        string[] ParsedLine = null;
        string NotParsedLine = null;
        char Delimiter = '|';

        for (int k = 0; k < ZipReadTable.Rows.Count; k++)
        {
            NotParsedLine = ZipReadTable.Rows[k][0].ToString();
            ParsedLine = NotParsedLine.Split(Delimiter);
            OutputTable.Rows.Add(ParsedLine);
        }
        return (OutputTable);