![](/img/trans.png)
[英]How to get nested array value from Query String Parameter and convert it to specific List of object?
[英]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];
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); } }
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.