C#读取CSV,我只想读取一些字段
CSV reading in C#, I just want to read some fields
我想读取一个 csv 文件,它有 9 列 headers 和下面的许多数据行,但我只对其中的三列感兴趣,并且它们 不连续 。我已经尝试使用此代码,但它不起作用,它在 foreach 循环中停止,并出现来自 CsvHelper 的运行时异常“'名称为 'Y' 的字段不存在。您可以通过将 MissingFieldFound 设置为 null 来忽略丢失的字段。 '".
csv文件是这样的:
FrameNO,Ttotal,TNo,X,Y,Z,速度,强度 , 日志;
1 , 9 , 1 , 0.08, 1.4 , 0 , 0 , 78 , 19 , ;;
1 , 9 , 2 ,0.1 , 1.56 , 0 , 0 , 228 , 28, ;;
using CsvHelper;
namespace RadarPrototipo.Clases
{
public class Foo
{
public int FrameNO { get; set; }
public double Y { get; set; }
public int Intensity { get; set; }
}
class CCalc
{
public double Calc(int f)
{
double d=1.5;
int inten=0;
using (var reader = new StreamReader("C:/Users/Usuario/Desktop/Uni/AlumnoInterno/grab.csv"))
using (var csv = new CsvReader(reader))
{
csv.Configuration.Delimiter = ",";
var records = csv.GetRecords<Foo>();
csv.Configuration.HeaderValidated = null;
foreach (var Foo in records)
{
if (Foo.FrameNO == f)
{
if (Foo.Y < 1.8 && Foo.Y > 1.5)
{
if (Foo.Intensity > inten)
{
inten = Foo.Intensity;
d = Foo.Y;
}
}
}
}
}
return d;
}
}
}
该函数分析这三列的数据并根据条件选择最佳答案,然后 returns 值 Y,即距离。
非常感谢任何帮助。
以下适合我。
public class Program
{
public static void Main(string[] args)
{
using (MemoryStream stream = new MemoryStream())
using (StreamWriter writer = new StreamWriter(stream))
using (StreamReader reader = new StreamReader(stream))
using (CsvReader csv = new CsvReader(reader))
{
writer.WriteLine("FrameNO,Column2,Y,Column4,Column5,Column6,Intensity,Column8,Column9");
writer.WriteLine("1,two,1.123,four,five,six,10,eight,nine");
writer.WriteLine("2,two,2.345,four,five,six,20,eight,nine");
writer.Flush();
stream.Position = 0;
var records = csv.GetRecords<Foo>();
foreach (var Foo in records)
{
Console.WriteLine(Foo.FrameNO);
}
}
Console.ReadLine();
}
}
public class Foo
{
public int FrameNO { get; set; }
public double Y { get; set; }
public int Intensity { get; set; }
}
您可以尝试的一件事是设置分隔符。您的文化默认值可能不是逗号。此外,如果您的数据和逗号之间有空格,则需要设置 TrimOptions
.
using (var csv = new CsvReader(reader))
{
csv.Configuration.Delimiter = ",";
csv.Configuration.TrimOptions = TrimOptions.Trim;
var records = csv.GetRecords<Foo>();
我想读取一个 csv 文件,它有 9 列 headers 和下面的许多数据行,但我只对其中的三列感兴趣,并且它们 不连续 。我已经尝试使用此代码,但它不起作用,它在 foreach 循环中停止,并出现来自 CsvHelper 的运行时异常“'名称为 'Y' 的字段不存在。您可以通过将 MissingFieldFound 设置为 null 来忽略丢失的字段。 '".
csv文件是这样的:
FrameNO,Ttotal,TNo,X,Y,Z,速度,强度 , 日志;
1 , 9 , 1 , 0.08, 1.4 , 0 , 0 , 78 , 19 , ;;
1 , 9 , 2 ,0.1 , 1.56 , 0 , 0 , 228 , 28, ;;
using CsvHelper;
namespace RadarPrototipo.Clases
{
public class Foo
{
public int FrameNO { get; set; }
public double Y { get; set; }
public int Intensity { get; set; }
}
class CCalc
{
public double Calc(int f)
{
double d=1.5;
int inten=0;
using (var reader = new StreamReader("C:/Users/Usuario/Desktop/Uni/AlumnoInterno/grab.csv"))
using (var csv = new CsvReader(reader))
{
csv.Configuration.Delimiter = ",";
var records = csv.GetRecords<Foo>();
csv.Configuration.HeaderValidated = null;
foreach (var Foo in records)
{
if (Foo.FrameNO == f)
{
if (Foo.Y < 1.8 && Foo.Y > 1.5)
{
if (Foo.Intensity > inten)
{
inten = Foo.Intensity;
d = Foo.Y;
}
}
}
}
}
return d;
}
}
}
该函数分析这三列的数据并根据条件选择最佳答案,然后 returns 值 Y,即距离。 非常感谢任何帮助。
以下适合我。
public class Program
{
public static void Main(string[] args)
{
using (MemoryStream stream = new MemoryStream())
using (StreamWriter writer = new StreamWriter(stream))
using (StreamReader reader = new StreamReader(stream))
using (CsvReader csv = new CsvReader(reader))
{
writer.WriteLine("FrameNO,Column2,Y,Column4,Column5,Column6,Intensity,Column8,Column9");
writer.WriteLine("1,two,1.123,four,five,six,10,eight,nine");
writer.WriteLine("2,two,2.345,four,five,six,20,eight,nine");
writer.Flush();
stream.Position = 0;
var records = csv.GetRecords<Foo>();
foreach (var Foo in records)
{
Console.WriteLine(Foo.FrameNO);
}
}
Console.ReadLine();
}
}
public class Foo
{
public int FrameNO { get; set; }
public double Y { get; set; }
public int Intensity { get; set; }
}
您可以尝试的一件事是设置分隔符。您的文化默认值可能不是逗号。此外,如果您的数据和逗号之间有空格,则需要设置 TrimOptions
.
using (var csv = new CsvReader(reader))
{
csv.Configuration.Delimiter = ",";
csv.Configuration.TrimOptions = TrimOptions.Trim;
var records = csv.GetRecords<Foo>();