C#解析CSV - 错误搜索

时间:2017-11-01 09:26:56

标签: c# csv

在CVS文件中,我有一个地址为IP的列。 当我试图找到不在列表中的100.100.100.2时,它找到100.100.100.21等。我怎么才能只搜索这个唯一的字符串?

分隔符是“;”

我用:

    TextFieldParser sprawdz = new TextFieldParser("C:\\wykaz_druk.csv");
    string currentLine;
    string searchcsv = textBox_SPR_SEARCH.Text;
    sprawdz.TextFieldType = FieldType.Delimited;
    sprawdz.Delimiters = new string[] { ";" };
    sprawdz.TrimWhiteSpace = true;


    do
    {
        currentLine = sprawdz.ReadLine();
        if (currentLine != null && currentLine.Contains(searchcsv))
        {
            string file = currentLine;
            string adresip = file.Split(';')[2].Trim();

            textBox2.Text = adresip;

        }
    }
    while (currentLine != null);

我也尝试过:

           .ReadLines("C:\\wykaz_druk.csv")
           .Where(line => line.Contains(NS)).FirstOfDefault();

                if (foundRecord != null)
                {
                    var cols = foundRecord.Split(';');
                    var status = cols[0];
...

3 个答案:

答案 0 :(得分:2)

我怀疑你检查整行,因为你想避免产生很多子串。但是,Contains将匹配包含该特定IP地址的任何行。

诀窍是强制Contains搜索单个字段匹配。如果IP字段出现在行的中间,则可以将分隔符添加到每一行,例如:

var searchCSV= String.Format(";{0};",textBox_SPR_SEARCH.Text);
// or 
// var searchCSV= $";{textBox_SPR_SEARCH.Text};";

if(currentLine?.Contains(searchcsv) == true)
{
    string file = currentLine;
    string adresip = file.Split(';')[2].Trim();
    ...
}

如果该字段出现在该行的开头,请仅使用结尾分隔符StartsWith

var searchCSV= $"{textBox_SPR_SEARCH.Text};";
if(currentLine?.StartsWith(searchcsv) == true)
...

如果它是最后一个字段,请使用EndsWith仅包含起始分隔符

var searchCSV= $";{textBox_SPR_SEARCH.Text}";
if(currentLine?.EndsWith(searchcsv) == true)

答案 1 :(得分:1)

string.Contains检查行是否包含指定的字符串。完全理解,"somestring".Contains("some")true。如果是这种情况,您首先需要从csv获取IP,然后检查结果是否与您请求的IP匹配。

TextFieldParser sprawdz = new TextFieldParser("C:\\wykaz_druk.csv");
string currentLine;
string searchcsv = textBox_SPR_SEARCH.Text;
sprawdz.TextFieldType = FieldType.Delimited;
sprawdz.Delimiters = new string[] { ";" };
sprawdz.TrimWhiteSpace = true;


do
{
    currentLine = sprawdz.ReadLine();
    if (currentLine != null)
    {
        string file = currentLine;
        string adresip = file.Split(';')[2].Trim();
        if(adresip == searchcsv)
        {
            textBox2.Text = adresip;
        }
    }
}
while (currentLine != null);

答案 2 :(得分:1)

在内部检查中使用等于

    if (currentLine != null && currentLine.Contains(searchcsv))
    {
        string file = currentLine;
        string adresip = file.Split(';')[2].Trim();

        if(adresip.Equals(searchcsv))
            textBox2.Text = adresip;

    }