Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.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# 在C中仅从CSV读取一个特定元素#_C#_Csv - Fatal编程技术网

C# 在C中仅从CSV读取一个特定元素#

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]

我对C#相当陌生,我一直在为一个问题伤脑筋。我需要从CSV文件(第2行,第4列)中读取一个特定行/位置,该文件始终保存我期望的数据

(如果您好奇的话:这个CSV文件是一个报告,前3行是一个标题。该字段包含一个日期)

以下是我(某种程度上)在做了一些研究(以及我的n00b C#技能)后开始做的事情:

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仍然读取整个文件。您应该使用读线,其中