C# 在C中仅从CSV读取一个特定元素#
我对C#相当陌生,我一直在为一个问题伤脑筋。我需要从CSV文件(第2行,第4列)中读取一个特定行/位置,该文件始终保存我期望的数据 (如果您好奇的话:这个CSV文件是一个报告,前3行是一个标题。该字段包含一个日期) 以下是我(某种程度上)在做了一些研究(以及我的n00b C#技能)后开始做的事情:C# 在C中仅从CSV读取一个特定元素#,c#,csv,C#,Csv,我对C#相当陌生,我一直在为一个问题伤脑筋。我需要从CSV文件(第2行,第4列)中读取一个特定行/位置,该文件始终保存我期望的数据 (如果您好奇的话:这个CSV文件是一个报告,前3行是一个标题。该字段包含一个日期) 以下是我(某种程度上)在做了一些研究(以及我的n00b C#技能)后开始做的事情: dt=newdatatable(); 字符串[]csvRows=System.IO.File.ReadAllLines(origFilePath); dt.Columns.Add(csvRows[0]
dt=newdatatable();
字符串[]csvRows=System.IO.File.ReadAllLines(origFilePath);
dt.Columns.Add(csvRows[0]);
对于(int x=1;x<2;x++)
{
dt.Rows.Add(csvRows[x]);
}
dt.行[0][0].ToString();//必须修改[0][0]
问题是,文件可能相当大,所以我不认为我需要读取整个文件并将其设置为表对象,然后检索该值
我肯定有更好的办法
有人能给点建议吗?提前感谢您的帮助
问候,,
P.
您正在寻找一种懒惰的方法来获得所需。懒惰意味着避免读取整个文件以获得正确的行
using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
{
var i = 0;
string line;
while ((line = sr.ReadLine()) != null)
{
if (i == 4) //4th position = 5th line (3 header lines plus 2 data lines)
{
return line.split(',')[3];
}
i++;
}
}
代码部分从此处删除:
或者,您可以执行以下操作:
var i = 0;
foreach (string line in File.ReadLines(filepath))
{
if (i == 4)
{
return line.split(',')[3];
}
i++;
}
你正在寻找一种懒惰的方法来获得你所需要的。懒惰意味着避免读取整个文件以获得正确的行
using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
{
var i = 0;
string line;
while ((line = sr.ReadLine()) != null)
{
if (i == 4) //4th position = 5th line (3 header lines plus 2 data lines)
{
return line.split(',')[3];
}
i++;
}
}
代码部分从此处删除:
或者,您可以执行以下操作:
var i = 0;
foreach (string line in File.ReadLines(filepath))
{
if (i == 4)
{
return line.split(',')[3];
}
i++;
}
你正在寻找一种懒惰的方法来获得你所需要的。懒惰意味着避免读取整个文件以获得正确的行
using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
{
var i = 0;
string line;
while ((line = sr.ReadLine()) != null)
{
if (i == 4) //4th position = 5th line (3 header lines plus 2 data lines)
{
return line.split(',')[3];
}
i++;
}
}
代码部分从此处删除:
或者,您可以执行以下操作:
var i = 0;
foreach (string line in File.ReadLines(filepath))
{
if (i == 4)
{
return line.split(',')[3];
}
i++;
}
你正在寻找一种懒惰的方法来获得你所需要的。懒惰意味着避免读取整个文件以获得正确的行
using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
{
var i = 0;
string line;
while ((line = sr.ReadLine()) != null)
{
if (i == 4) //4th position = 5th line (3 header lines plus 2 data lines)
{
return line.split(',')[3];
}
i++;
}
}
代码部分从此处删除:
或者,您可以执行以下操作:
var i = 0;
foreach (string line in File.ReadLines(filepath))
{
if (i == 4)
{
return line.split(',')[3];
}
i++;
}
一艘班轮:
var myValue = System.IO.File.ReadLines(origFilePath).Skip(1).First().Split(',')[3];
我确信这不是最佳的方法(我甚至没有测试过),但应该做到这一点
不要忘记导入Linq名称空间(使用System.Linq;
)。一行程序:
var myValue = System.IO.File.ReadLines(origFilePath).Skip(1).First().Split(',')[3];
我确信这不是最佳的方法(我甚至没有测试过),但应该做到这一点
不要忘记导入Linq名称空间(使用System.Linq;
)。一行程序:
var myValue = System.IO.File.ReadLines(origFilePath).Skip(1).First().Split(',')[3];
我确信这不是最佳的方法(我甚至没有测试过),但应该做到这一点
不要忘记导入Linq名称空间(使用System.Linq;
)。一行程序:
var myValue = System.IO.File.ReadLines(origFilePath).Skip(1).First().Split(',')[3];
我确信这不是最佳的方法(我甚至没有测试过),但应该做到这一点
不要忘记导入Linq名称空间(
使用System.Linq;
)。您可以使用oledb读取csv而无需打开。您可以修改SQL语句以仅检索所需的列
public class CSVReader
{
public DataSet ReadCSVFile(string fullPath, bool headerRow)
{
string path = fullPath.Substring(0, fullPath.LastIndexOf("\\") + 1);
string filename = fullPath.Substring(fullPath.LastIndexOf("\\") + 1);
DataSet ds = new DataSet();
try
{
if (File.Exists(fullPath))
{
string ConStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}" + ";Extended Properties=\"Text;HDR={1};FMT=Delimited\\\"", path, headerRow ? "Yes" : "No");
string SQL = string.Format("SELECT * FROM {0}", filename);
OleDbDataAdapter adapter = new OleDbDataAdapter(SQL, ConStr);
adapter.Fill(ds, "TextFile");
ds.Tables[0].TableName = "Table1";
}
foreach (DataColumn col in ds.Tables["Table1"].Columns)
{
col.ColumnName = col.ColumnName.Replace(" ", "_");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return ds;
}
}
您可以使用oledb读取csv而无需打开。您可以修改SQL语句以仅检索所需的列
public class CSVReader
{
public DataSet ReadCSVFile(string fullPath, bool headerRow)
{
string path = fullPath.Substring(0, fullPath.LastIndexOf("\\") + 1);
string filename = fullPath.Substring(fullPath.LastIndexOf("\\") + 1);
DataSet ds = new DataSet();
try
{
if (File.Exists(fullPath))
{
string ConStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}" + ";Extended Properties=\"Text;HDR={1};FMT=Delimited\\\"", path, headerRow ? "Yes" : "No");
string SQL = string.Format("SELECT * FROM {0}", filename);
OleDbDataAdapter adapter = new OleDbDataAdapter(SQL, ConStr);
adapter.Fill(ds, "TextFile");
ds.Tables[0].TableName = "Table1";
}
foreach (DataColumn col in ds.Tables["Table1"].Columns)
{
col.ColumnName = col.ColumnName.Replace(" ", "_");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return ds;
}
}
您可以使用oledb读取csv而无需打开。您可以修改SQL语句以仅检索所需的列
public class CSVReader
{
public DataSet ReadCSVFile(string fullPath, bool headerRow)
{
string path = fullPath.Substring(0, fullPath.LastIndexOf("\\") + 1);
string filename = fullPath.Substring(fullPath.LastIndexOf("\\") + 1);
DataSet ds = new DataSet();
try
{
if (File.Exists(fullPath))
{
string ConStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}" + ";Extended Properties=\"Text;HDR={1};FMT=Delimited\\\"", path, headerRow ? "Yes" : "No");
string SQL = string.Format("SELECT * FROM {0}", filename);
OleDbDataAdapter adapter = new OleDbDataAdapter(SQL, ConStr);
adapter.Fill(ds, "TextFile");
ds.Tables[0].TableName = "Table1";
}
foreach (DataColumn col in ds.Tables["Table1"].Columns)
{
col.ColumnName = col.ColumnName.Replace(" ", "_");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return ds;
}
}
您可以使用oledb读取csv而无需打开。您可以修改SQL语句以仅检索所需的列
public class CSVReader
{
public DataSet ReadCSVFile(string fullPath, bool headerRow)
{
string path = fullPath.Substring(0, fullPath.LastIndexOf("\\") + 1);
string filename = fullPath.Substring(fullPath.LastIndexOf("\\") + 1);
DataSet ds = new DataSet();
try
{
if (File.Exists(fullPath))
{
string ConStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}" + ";Extended Properties=\"Text;HDR={1};FMT=Delimited\\\"", path, headerRow ? "Yes" : "No");
string SQL = string.Format("SELECT * FROM {0}", filename);
OleDbDataAdapter adapter = new OleDbDataAdapter(SQL, ConStr);
adapter.Fill(ds, "TextFile");
ds.Tables[0].TableName = "Table1";
}
foreach (DataColumn col in ds.Tables["Table1"].Columns)
{
col.ColumnName = col.ColumnName.Replace(" ", "_");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return ds;
}
}
从CSV文件中读取行,直接转到第15个位置并获取值。 请参阅下面的c#代码
从CSV文件中读取行,直接转到第15个位置并获取值。 请参阅下面的c#代码
从CSV文件中读取行,直接转到第15个位置并获取值。 请参阅下面的c#代码
从CSV文件中读取行,直接转到第15个位置并获取值。 请参阅下面的c#代码
您能否添加一个简单版本的csv文件并显示您想要阅读的内容?可能您可以直接读取
mth
行,并使用String.Split(',')
获取nth
列。是否可以添加csv文件的简单版本并显示您想要读取的内容?可能您可以直接读取mth
行,并使用String.Split(',')
获取nth
列。是否可以添加csv文件的简单版本并显示您想要读取的内容?可能您可以直接读取mth
行,并使用String.Split(',')
获取nth
列。是否可以添加csv文件的简单版本并显示您想要读取的内容?可能您可以直接读取mth
行,并使用String.Split(',')
获取nth
列。可能重复File.ReadAllLines(“File”).Skip(1).First().Split(',')[3]
已修复。谢谢@ArghyaC!等等,但是ReadAllLines仍然读取整个文件。您应该使用以惰性方式执行此操作的ReadLines..从ReadAllLines
更改为ReadLines
。谢谢@Maourveitsman!在某些情况下,CSV值可能很复杂,并且在双引号中包含逗号(value1,value2,“值3,带逗号”,value4)。在这种情况下,这个简单的解决方案将失败。File.ReadAllLines(“File”).Skip(1).First().Split(',')[3]
Fixed。谢谢@ArghyaC!等等,但是ReadAllLines仍然读取整个文件。您应该使用以惰性方式执行此操作的ReadLines..从ReadAllLines
更改为ReadLines
。谢谢@Maourveitsman!在某些情况下,CSV值可能很复杂,并且在双引号中包含逗号(value1,value2,“值3,带逗号”,value4)。在这种情况下,这个简单的解决方案将失败。File.ReadAllLines(“File”).Skip(1).First().Split(',')[3]
Fixed。谢谢@ArghyaC!等等,但是ReadAllLines仍然读取整个文件。您应该使用以惰性方式执行此操作的ReadLines..从ReadAllLines
更改为ReadLines
。谢谢@Maourveitsman!在某些情况下,CSV值可能很复杂,并且在双引号中包含逗号(value1,value2,“值3,带逗号”,value4)。在这种情况下,这个简单的解决方案将失败。File.ReadAllLines(“File”).Skip(1).First().Split(',')[3]
Fixed。谢谢@ArghyaC!等等,但是ReadAllLines仍然读取整个文件。您应该使用读线,其中