C# 读取CSV文件
我编写了一个从C# 读取CSV文件,c#,.net,csv,console-application,C#,.net,Csv,Console Application,我编写了一个从csv文件读取数据的小程序: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace test { class Program { static void Main( string[] args ) { var reader = ne
csv
文件读取数据的小程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace test
{
class Program
{
static void Main( string[] args )
{
var reader = new StreamReader( File.OpenRead( @"C:\Users\Desktop\Results.csv" ) );
List<string> listA = new List<string>();
List<string> listB = new List<string>();
while ( !reader.EndOfStream )
{
var line = reader.ReadLine();
var values = line.Split( ',' );
listA.Add( values[0] );
listB.Add( values[1] );
}
// Print column one.
Console.WriteLine( "Column 1:" );
foreach ( var element in listA )
Console.WriteLine( element );
// Print column two.
Console.WriteLine( "Column 2:" );
foreach ( var element in listB )
Console.WriteLine( element );
Console.ReadKey();
}
}
}
当我注释掉与listB
有关的所有内容时,它会起作用并显示第一列
有人能帮我理解我做错了什么吗
谢谢,发生此错误的原因可能是读取的行后面没有“,”字符或文本。因此,值[1]不存在,并引发错误。例如,您可以使用
if(values.length < 2)
{
//do what ever is needed in your case
}
if(values.length<2)
{
//做你需要做的事情
}
或者确保正在读取的文件在每行上至少有两个由“,”分隔的值。线条
文本1
例如,将导致该错误。这是因为您的this line
line.Split(',')代码>必须返回,单个项目。返回的数组值
只有一个元素
在添加之前,应检查是否存在任何元素,如下所示:-
if(values.Length > 1)
listB.Add( values[1] );
在文件/文档中的一行上,没有任何拆分。我是说你没有
value,value
您可以检查字符串数组是否包含两个值,然后执行添加到列表或修复文件
您还可以尝试查看如何使用OleDbConnection
读取csv文件
在这个问题中,我写了如何在DataTable
中读取和存储数据:
通过csv数据进行如下枚举:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace CSV_ReadCsvColumn
{
class Program
{
private static IEnumerable<string[]> LoadCsvData(string path, params char[] separator)
{
return from line in File.ReadLines(path)
let parts = (from p in line.Split(separator, StringSplitOptions.RemoveEmptyEntries) select p)
select parts.ToArray();
}
static void Main()
{
IEnumerable<string[]> lines = LoadCsvData(@"file.csv", ';');
if (lines != null)
{
// Print column one.
foreach (var line in lines)
Console.WriteLine(line[0]);
// Print column two.
foreach (var line in lines)
Console.WriteLine(line[1]);
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.IO;
使用System.Linq;
名称空间CSV\u ReadCSV列
{
班级计划
{
私有静态IEnumerable LoadCsvData(字符串路径,参数char[]分隔符)
{
从文件.ReadLines(路径)中的行返回
让parts=(从line.Split(分隔符、StringSplitOptions.RemoveEmptyEntries)中的p选择p)
选择parts.ToArray();
}
静态void Main()
{
IEnumerable lines=LoadCsvData(@“file.csv”,“;”);
如果(行!=null)
{
//打印第一列。
foreach(行中的var行)
Console.WriteLine(第[0]行);
//打印第二栏。
foreach(行中的var行)
Console.WriteLine(第[1]行);
}
}
}
}
值的值是多少?里面有什么东西吗?它应该填充的字符串是什么?在调试器中逐步浏览代码,您很可能会很快发现问题。没有双关语,为什么每个人都试图在有非常好的库可用时编写自己的CSV解析器(例如)?非常好的代码片段,非常感谢:)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace CSV_ReadCsvColumn
{
class Program
{
private static IEnumerable<string[]> LoadCsvData(string path, params char[] separator)
{
return from line in File.ReadLines(path)
let parts = (from p in line.Split(separator, StringSplitOptions.RemoveEmptyEntries) select p)
select parts.ToArray();
}
static void Main()
{
IEnumerable<string[]> lines = LoadCsvData(@"file.csv", ';');
if (lines != null)
{
// Print column one.
foreach (var line in lines)
Console.WriteLine(line[0]);
// Print column two.
foreach (var line in lines)
Console.WriteLine(line[1]);
}
}
}
}