簡體   English   中英

如何從字符串數組列表中獲取特定值

[英]How get specific value from list of string array

我正在以這種方式將csv文件讀入列表中,文件中的每一行都是數組單元格,每個單元格都是列數組。 這是我的閱讀鱈魚:

public List<string[]> parseCSV(string path)
    {
       List<string[]> parsedData = new List<string[]>();
        string[] fields;

           TextFieldParser parser = new TextFieldParser(path);
            parser.TextFieldType = FieldType.Delimited;
            parser.SetDelimiters(",");

            while (!parser.EndOfData)
            {
                fields = parser.ReadFields();
                parsedData.Add(fields);

            }

            parser.Close();

        return parsedData;
    }

最后我得到了這個字符串數組列表。 現在我希望從特定單元格讀取特定值,並從parsedData中讀取特定行。 我怎樣才能做到這一點 ?

我的問題是我想要的“行”是一個字符串值,我要查找的值來自列號1和行值“key”。

所以你有一個List<string[]>但不知道如何從中訪問一個特定的“行”或“列”? 您只需要使用索引器。 數組/列表為零索引:

string field3OfRow4 = parsedData[3][2]; // can cause an IndexOutOfRangeException

您必須處理行或列較少的情況。 因此,使用列表的Count屬性和數組的Length屬性:

if(parsedData.Count >= 4 && parsedData[3].Length >= 3)
{
    // safe
    string field3OfRow4 = parsedData[3][2];
}

你也可以使用循環。

您可以根據以下索引訪問List和數組:

string specificValue = parsedData[row][col];

但更好的選擇是為CSV項創建一個類。 然后解析每一行並創建該類的對象,它將為您提供更大的靈活性。

List<MyCSVItem> list = new List<MyCSVItem>();

然后在解析時,您可以將string[]傳遞給類構造函數,並將對象添加到List<T>

while (!parser.EndOfData)
{
    string[] fields = parser.ReadFields();
    list.Add(new MyCSVItem(fields));
}

讓我們打破這個:

  • 我們有一個List<T> list並訪問一個元素(行),其中T row = list[y-1] (從零開始)
  • 在這種情況下, T代表string[] ,我們訪問一個元素: string field = row[x - 1]
  • 總而言之,我們可以這樣做:

     List<string[]> rows = parseCSV("somePath"); //----------- string[] fieldNames = rows[0]; //get first row string firstFieldname = fieldNames[0]; //get first row's first column //or shorter: string firstFieldname = rows[0][0]; 

  • 根據要求,您可以通過以下方式在第1列中搜索值“key”:

     for(int r = 0 /*change to 1 to skip first row*/ ; r < rows.Count; r++) { string[] entry = rows[r]; string firstColumn = entry[0]; if(firstColumn == "key") { Console.WriteLine("Found 'key' in first column of row " + r); } } 

  • 您可以像這樣評估您的CSV內容:

     List<string[]> rows = parseCSV("somePath"); for(int r = 1; r < rows.Count; r++) { string[] entry = rows[r]; if(entry.Length != fieldNames.Length) { throw new FieldAccessException("illegal field length at row " + r + ": " + entry.Length); } Console.WriteLine("Row " + r + " = {"); for(int f = 0; f < fieldNames.Length; f++) { Console.WriteLine("\\t" + fieldNames[f] + " = " + entry[f]); } Console.WriteLine("}"); } 
  • 暫無
    暫無

    聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

     
    粵ICP備18138465號  © 2020-2024 STACKOOM.COM