我有一个制表符分隔的文件,其中有重复的命名标题;
[Column1] \t [Column2] \t [test] \t [test] \t [test] \t [test] \t [Column3] \t [Column4]
我想要做的是用整数重命名重复的列 [test]。所以会变成类似
[Column1] \t [Column2] \t [test1] \t [test2] \t [test3] \t [test4] \t [Column3] \t [Column4]
到目前为止,我可以隔离第一行。然后计算我找到的匹配项
string destinationUnformmatedFileName = @"C:\New\20130816_Opportunities_unFormatted.txt";
string destinationFormattedFileName = @"C:\New\20130816_Opportunities_Formatted.txt";
var unformattedFileStream = File.Open(destinationUnformmatedFileName, FileMode.Open, FileAccess.Read); // Open (unformatted) file for reading
var formattedFileStream = File.Open(destinationFormattedFileName, FileMode.Create, FileAccess.Write); // Create (formattedFile) for writing
StreamReader sr = new StreamReader(unformattedFileStream);
StreamWriter sw = new StreamWriter(formattedFileStream);
int rowCounter = 0;
// Read each row in the unformatted file
while ((currentRow = sr.ReadLine()) != null)
{
//First row, lets check for duplicate names
if (rowCounter = 0)
{
// Write column name to array
string delimiter = "\t";
string[] fieldNames = currentRow.Split(delimiter.ToCharArray());
foreach (string fieldName in fieldNames)
{
// fieldName must be followed by a tab for it to be a duplicate
// original code - causing the issue
//Regex rgx = new Regex("\\t(" + fieldName + ")\\t");
// Edit - resolved the issue
Regex rgx = new Regex("(?<=\\t|^)(" + fieldName + ")(\\t)+");
// Count how many occurances of fieldName in currentRow
int count = rgx.Matches(currentRow).Count;
//MessageBox.Show("Match Count = " + count.ToString());
// If we have a duplicate field name
if (count > 1)
{
string newFieldName = "\t" + fieldName + count.ToString() + "\t";
//MessageBox.Show(newFieldName);
currentRow = rgx.Replace(currentRow, newFieldName, 1);
}
}
}
rowCounter++;
}
我认为我在正确的轨道上,但我不认为正则表达式工作正常?
编辑:我想我已经弄清楚如何使用 using 找到模式;
Regex rgx = new Regex("(?<=\\t|^)(" + fieldName + ")(\\t)+");
它不是破坏交易,但现在唯一的问题是它贴标签;
[Column1] \t [Column2] \t [test4] \t [test3] \t [test2] \t [test] \t [Column3] \t [Column4]
代替
[Column1] \t [Column2] \t [test1] \t [test2] \t [test3] \t [test4] \t [Column3] \t [Column4]