我有以下包含“|”的txt文件分隔器。我想读取文件并将其输出到csv文件中。
n
但是从第3行和第5行可以看出格式不一致。用户添加了额外的“|”公司名称。如何编写将上述内容复制到csv文件中的C#脚本,该文件将产生以下结果。我正在努力的一点是第3行和第5行。
Date|Currency|Location|Company|Price
11112012|GBP|London|EasyJet|200.00
12122012|GBP|Manchester|British|Airways|100.00
10102014|EUR|Frankfurt|Lufthansa|300.00
10102014|EUR|Paris|Air|France|500.00
帮助将不胜感激。
答案 0 :(得分:1)
首先,清理数据。伪代码:
List<String> cleansedFile = new List<String>();
int pipeCount;
foreach (String line in textFile)
{
pipeCount = // count how many pipes are in the line
if (pipeCount == 5)
{
String s = // replace fourth pipe with a space
}
cleansedFile.Add(s);
}
cleansedFile.SaveToFile("cleanFile.txt");
然后您可以按照需要继续(使用一致/可靠的行)。
同样,这提供了总共四到五个管道;如果有时候或多或少,那会使问题复杂化。
也许更好的方法是将管道上的线分成一个数组,这样就可以得到如下数组:
[0] = 11112012
[1] = GBP // Green Bay Packers, I take it
[2] = London
[3] = EasyJet
[4] = 200.00
[0] = 12122012
[1] = GBP
[2] = Manchester
[3] = British
[4] = Airways
[5] = 100.00
然后,如果有6个元素而不是5个元素,则可以重新组合这些值,连接元素3和4;类似的旋转可以用于其他场景。
答案 1 :(得分:0)
你可以用正则表达式做到这一点; e.g。
using System.Text.RegularExpressions;
class Program
{
static void Main(string[] args)
{
string[] data = new string[]{"Date|Currency|Location|Company|Price","11112012|GBP|London|EasyJet|200.00","12122012|GBP|Manchester|British|Airways|100.00","10102014|EUR|Frankfurt|Lufthansa|300.00","10102014|EUR|Paris|Air|France|500.00"};
Regex splitter = new Regex("([^|]+)|([^|]+)|([^|]+)|(.+)|([^|]+)");
int lineNo = 0;
foreach (var line in data)
{
lineNo++;
int fieldNo = 0;
foreach (var value in splitter.Matches(line))
{
fieldNo++;
Console.WriteLine(string.Format("Line {0:00} Column: {1:00}: Value: {2}", lineNo, fieldNo, value.ToString()));
}
}
Console.WriteLine("Done");
Console.ReadKey();
}