在csv中查找字符串并使用c#返回列号

时间:2017-11-22 21:26:48

标签: c# string csv

我试图找出如何搜索csv中单元格中找到的特定字符串并返回列号。我已经找到了如何返回行号,但我还需要列。我想到了一种方法,可以在我正在寻找的字符串出现之前计算CSV分隔符的数量。你知道我怎么做吗?这就是我如何阻止行号。

foreach (var match in File.ReadLines(filePath)
                      .Select((text, index) => new { text, lineNumber = index + 1 })
                      .Where(x => x.text.Contains("CH1_Value")))
{
    Console.WriteLine("{0}: {1}", match.lineNumber, match.text);
}

2 个答案:

答案 0 :(得分:0)

您需要将行拆分为列,然后找到匹配的列文本。

var lines = File.ReadLines(filePath);

var lineIdx = 0;
var colIdx = 0;

foreach(var line in lines) {
    lineIdx++;
    foreach(var column in line.Split(',')) { // split cols here
        colIdx++;
        if(column.Contains("target_text")) {
            // found in {lineIdx} and {colIdx}
        }
    }
    colIdx = 0; // reset col index
}

答案 1 :(得分:0)

以下是使用Linq和匿名类型的一种方法:

List<string> lines = File.ReadLines(filePath).ToList();
string textToSearch = "CH1_Value";
int lineIndex = lines.Select((l, ix) => new { line = l, index = ix })
    .FirstOrDefault(l => l.line.Contains(textToSearch)).index;
int columnIndex = lines[lineIndex].Split(',').Select((c, ix) => new { col = c, index = ix })
    .FirstOrDefault(c => c.col.Contains(textToSearch)).index;