gpt4 book ai didi

c# - 替换逗号分隔文件中的特定逗号

转载 作者:行者123 更新时间:2023-11-30 23:24:56 24 4
gpt4 key购买 nike

我有一个文件,我将其流式传输到列表对象中以保存到数据库中的临时文件中,因为我必须使用临时表中的数据连接到其他表以获得最终结果,然后将此最终结果导出到.csv 文件。

除了原始文件的流读取外,一切正常。

该文件以逗号分隔且结构非常具体,并且结构永远不会改变。

我遇到的问题是:

“AccountHolder”字段在组成字符串的字符之间有一个逗号,因此我的 FileStream 将其视为分隔符。如何在不破坏 FileStream 必须遵守的逗号分隔符的情况下替换 AccountHolder 字符串中的逗号?

List<object[]> fileContent = new List<object[]>();

using (FileStream reader = File.OpenRead(ofd.FileName))
using (TextFieldParser parser = new TextFieldParser(reader))
{
parser.TrimWhiteSpace = true;
parser.Delimiters = new[] { "," };
parser.HasFieldsEnclosedInQuotes = true;
while (!parser.EndOfData)
{
object[] line = parser.ReadFields();
fileContent.Add(line);
lstRegNo.Add(line[0].ToString().Trim());
lstAccHolder.Add(line[1].ToString().Trim().Replace(',', ' '));
lstAmount.Add(line[2].ToString().Trim().Replace(',', ' '));
lstAccNo.Add(line[3].ToString().Trim());
lstBranch.Add(line[4].ToString().Trim());
lstDate.Add(line[5].ToString().Trim());
lstCode.Add(line[6].ToString().Trim());
lstOrphenColumn.Add(line[7].ToString().Trim());
}

这是我正在流式传输的文件示例:

000001,A WHATEVER,00000000001,0000000000001,000001,160510,17,0
000002,B WHATEVER,00000000002,0000000000002,000002,160510,17,0
000003,C, WHATEVER,00000000003,0000000000003,000003,160510,17,0
000004,D WHATEVER,00000000004,0000000000004,000004,160510,17,0
000005,E WHATEVER,00000000005,0000000000005,000005,160510,17,0

如您所见,在第 3 行,AccountHolder 的姓名中有一个逗号。我需要这个值是“C WHATEVER”,而不是“C, WHATEVER” 我想消除那个逗号但仍然能够将文件流式传输到我的列表中对象用逗号分割文件中的字段。

请注意,每次我收到该文件的数据都会有所不同,因此简单地寻找一个静态值不会削减它。

我该怎么做?

最佳答案

嗯...如果字段是固定的,那么您就没有正确设置您的解析器。它知道如何处理固定宽度的字段,这与规范的 CSV 文件有些不同。

顺便说一句,我倾向于创建一些常量来反射(reflect)“列”的名称:

//--> indexes into parsed line...
const int RegNo = 0;
const int AcctHolder = 2;
const int Amount = 4;
const int AcctNo = 6;
//--> ...etc.

using Microsoft.VisualBasic.FileIO;
//...
List<object[]> fileContent = new List<object[]>();
using (FileStream reader = File.OpenRead(ofd.FileName))
using (TextFieldParser parser = new TextFieldParser(reader))
{
parser.TextFieldType = FieldType.FixedWidth;
parser.SetFieldWidths
(
6 1, //--> width of RegNo, width of ignored comma
10, 1, //--> width of AcctHolder, width of ignored comma
10, 1, //--> width of Amount, width of ignored comma
13, 1, //--> etc...
6, 1,
6, 1,
2, 1,
1
);
while (!parser.EndOfData)
{
object[] line = parser.ReadFields();
fileContent.Add(line);
lstRegNo.Add( line[ RegNo ].ToString( ));
lstAccHolder.Add(line[ AcctHolder ].ToString().Replace(',', ' '));
lstAmount.Add(line[ Amount ].ToString().Trim().Replace(',', ' '));
lstAccNo.Add(line[ AcctNo ].ToString().Trim());
//--> etc...
}
}

更多信息,查看this出。

关于c# - 替换逗号分隔文件中的特定逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37525159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com