Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#中读取csv文件的第一列?_C#_Csv - Fatal编程技术网

在c#中读取csv文件的第一列?

在c#中读取csv文件的第一列?,c#,csv,C#,Csv,有没有一种简单的方法可以在c#中读取和显示CSV文件的第一列? 像这样的 String csv = File.ReadAllLines("@..\..\..\Data.csv).Split(',')[0]; Console.WriteLine(csv); 或者我必须在csv文件中的每一行上循环,只取每一行的第一个值吗 谢谢根据,您可以选择要提取的csv列 var csv = File.ReadAllLines(@"C:..\..\..\Data.csv"); public List<My

有没有一种简单的方法可以在c#中读取和显示CSV文件的第一列? 像这样的

String csv = File.ReadAllLines("@..\..\..\Data.csv).Split(',')[0];
Console.WriteLine(csv);
或者我必须在csv文件中的每一行上循环,只取每一行的第一个值吗

谢谢

根据,您可以选择要提取的csv列

var csv = File.ReadAllLines(@"C:..\..\..\Data.csv");
public List<MyMappedCSVFile>() myExtraction = new List<MyMappedCSVFile>();
foreach(string line in csv)
{
  var delimitedLine = line.Split(',');

  myExtraction.Add(new MyMappedCSVFile(delimitedLine[0], delimitedLine[1]));
}
var csv=File.ReadAllLines(@“C:..\..\Data.csv”);
public List()myExtraction=new List();
foreach(csv中的字符串行)
{
var delimitedLine=line.Split(',');
添加(新的MyMappedCSVFile(delimitedLine[0],delimitedLine[1]);
}

对于读取csv文件,我建议使用。您可以这样使用它:

var firstColumn = new List<string>();
using (var fileReader = File.OpenText("@..\..\..\Data.csv"))
using (var csvResult  = new CsvHelper.CsvReader(fileReader))
{
    while (csvResult.Read())
    {
        var field = csvResult.GetField<string>(0);
        firstColumn.Add(field);
    }
}
var firstLine = await GetFirstLineAsync(@"C:\Temp\Test.csv").ConfigureAwait(false);
var firstColumn=newlist();
使用(var fileReader=File.OpenText(“@..\..\Data.csv”))
使用(var csvResult=new CsvHelper.CsvReader(文件阅读器))
{
while(csvResult.Read())
{
var字段=csvResult.GetField(0);
firstColumn.Add(字段);
}
}
试试这个:

public static async Task<HashSet<string>> GetFirstLineAsync(string fileFullname)
{
  try
  {
    var firstLine = await File.OpenText(fileFullname).ReadLineAsync().ConfigureAwait(false);
    return firstLine.Split(';').ToHashSet();
  }
  catch (UnauthorizedAccessException ex)
  {
   // TODO: Handle the System.UnauthorizedAccessException
  }
  catch (DirectoryNotFoundException ex)
  {
   // TODO: Handle the System.IO.DirectoryNotFoundException
  }
  catch (FileNotFoundException ex)
  {
   // TODO: Handle the System.IO.FileNotFoundException
  }
  catch (ArgumentException ex)
  {
   // TODO: Handle the System.ArgumentException
  }
  catch (PathTooLongException ex)
  {
   // TODO: Handle the System.IO.PathTooLongException
  }
  catch (NotSupportedException ex)
  {
   // TODO: Handle the System.NotSupportedException
  }
  catch (ObjectDisposedException ex)
  {
   // TODO: Handle the System.ObjectDisposedException
  }
  catch (InvalidOperationException ex)
  {
    // TODO: Handle the System.InvalidOperationException
  }
  return null;
}

循环有什么问题?如果循环起作用,那么就这样做并继续移动。您可以使用LINQ,但即使这样,也将使用引擎盖下的环路。一个建议是,使用
ReadLines
而不是
ReadAllLines
,但即使这样也可能没有什么区别,所以这只是一个建议。动机是什么?CSV有多大?您想要的是代码行数较少的东西还是不占用过多计算机资源的东西?不要将一行代码与“简单解决方案”混为一谈!无法跳过读取CSV文件中的所有其他“列”,而只读取第一列。CSV是纯文本文件,行长可能会有所不同(无法读取第一列并跳到下一行。我认为您应该使用现有的框架(如前面所说的CsvHelper),不要重新发明轮子(如果它不是学校作业)如果第一列中的引号内有,则解决方案将失败。您需要跳过引号文本以获得分隔符(不必是逗号)。