[英]Using CSVHelper to read a CSV file and need to extract columns to arrays
我這里有這個代碼,它可以按我想要的方式工作,但我是在 .Net Standard 上開發的,不能使用Microsoft.VisualBasic.FileIO
庫。 我希望能夠使用CsvHelper
做同樣的事情
CsvHelper
是否可以首先將標題行作為字符串數組獲取。 其次,將每一行作為項目的字符串數組?
using Microsoft.VisualBasic.FileIO;
using (TextFieldParser csvParser = new TextFieldParser("FilePath"))
{
csvParser.CommentTokens = new string[] { "#" };
csvParser.SetDelimiters(new string[] { "," });
csvParser.HasFieldsEnclosedInQuotes = true;
csvParser.TrimWhiteSpace = true;
string[] fields = csvParser.ReadFields();
int arraySize = fields.Length;
int index = Array.IndexOf(fields, columnExtracted);
while (!csvParser.EndOfData)
{
fields = csvParser.ReadFields();
string column = fields[index];
Console.WriteLine(column);
}
}
我嘗試了以下讀取單元格的代碼,但由於行string Csv = string.Join("\\n", result.ToArray());
在遇到分隔符時會中斷該行string Csv = string.Join("\\n", result.ToArray());
有沒有辦法將所有信息放在一個數組中? 它已經存儲在字符串列表中,但我無法通過索引檢索數據。
List<string> result = new List<string>();
string value;
using (TextReader fileReader = File.OpenText("FilePath"))
{
var csv = new CsvReader(fileReader, CultureInfo.InvariantCulture);
csv.Configuration.HasHeaderRecord = true;
while (csv.Read())
{
for (int i = 0; csv.TryGetField<string>(i, out value); i++)
{
result.Add(value);
}
if (csv.Read() == false)
break;
}
}
string Csv = string.Join("\n", result.ToArray());
編輯
這是我現在反饋后的新代碼。 但是,在遍歷存儲所有記錄的 List 時,它似乎忽略了標題行。
public List<string> HeaderColumnParser(string columnExtracted, string PathToFile)
{
List<string> result = new List<string>();
string value;
using (TextReader fileReader = File.OpenText(PathToFile))
{
var csv = new CsvReader(fileReader, CultureInfo.InvariantCulture);
csv.Read();
csv.ReadHeader();
string[] header = csv.Context.HeaderRecord;
int extractedIndex = Array.IndexOf(header, columnExtracted);
while (csv.Read())
{
string[] row = csv.Context.Record;
string column = row[extractedIndex];
result.Add(column);
}
}
return result;
如果您希望每一行都作為字符串數組,這應該可以工作。
using (MemoryStream stream = new MemoryStream())
using (StreamWriter writer = new StreamWriter(stream))
using (StreamReader reader = new StreamReader(stream))
using (CsvReader csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
writer.WriteLine("Id,Name,Column3,Column4,Column5");
writer.WriteLine("1,One,Item1,Item2,Item3");
writer.WriteLine("2,Two,Item4,Item5,Item6");
writer.Flush();
stream.Position = 0;
reader.BaseStream.Position = 0;
csv.Read();
csv.ReadHeader();
string[] header = csv.Context.HeaderRecord;
var columnExtracted = "Column3";
int extractedIndex = Array.IndexOf(header, columnExtracted);
while (csv.Read())
{
string[] row = csv.Context.Record;
var column = row[extractedIndex];
Console.WriteLine(column);
}
}
Console.ReadKey();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.