我有一个应用程序,它将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!
答案 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);