Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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中使用System.IO.File.ReadAllLines(fil)跳过第一行#_C#_Arrays_String - Fatal编程技术网

C# 在C中使用System.IO.File.ReadAllLines(fil)跳过第一行#

C# 在C中使用System.IO.File.ReadAllLines(fil)跳过第一行#,c#,arrays,string,C#,Arrays,String,我有这样一种说法: string[] lines = System.IO.File.ReadAllLines(file); foreach (string line in lines) { ... } 这会导致我出错,因为基础.csv文件中有一个头。我想跳过这一行,但当我使用: string [] lines = System.IO.File.ReadLines(file).Skip(1).ToArray(); 生成字符串无法使用跳过(1)。当我尝试使用时,也是这样: strin

我有这样一种说法:

string[] lines = System.IO.File.ReadAllLines(file);
foreach (string line in lines)
{
      ...
}
这会导致我出错,因为基础.csv文件中有一个头。我想跳过这一行,但当我使用:

string [] lines = System.IO.File.ReadLines(file).Skip(1).ToArray();
生成
字符串
无法使用
跳过(1)
。当我尝试使用时,也是这样:

string[] lines = System.IO.File.ReadAllLines(file);
lines = lines.Skip(1).ToArray();
给我同样的错误

有人知道吗?我是否可以将
Foreach
循环调整为
For
循环,在该循环中取消第一行

问候,

编辑

我现在使用的代码是:

    string[] lines = System.IO.File.ReadAllLines(file);
    lines = lines.Skip(1).ToArray();

   foreach (string line in lines)
    {
            var cols = line.Split(';');
            if (cols.Length == 1)
                continue;
            DataRow dr = tbl.NewRow();
            dr[0] = file;
            for (int cIndex = 1; cIndex + 1 < tbl.Columns.Count; cIndex++)
            {
                dr[cIndex + 1] = cols[cIndex];
            }
    }
    System.Text.StringBuilder b = new System.Text.StringBuilder();
    foreach (System.Data.DataRow r in tbl.Rows)
    {
        foreach (System.Data.DataColumn c in tbl.Columns)
        {
            b.Append(c.ColumnName.ToString() + ":" + r[c.ColumnName].ToString());
        }
    }
    MessageBox.Show(b.ToString());
    return tbl;
string[]lines=System.IO.File.ReadAllLines(文件);
lines=lines.Skip(1.ToArray();
foreach(行中的字符串行)
{
var cols=line.Split(“;”);
如果(列长度==1)
继续;
DataRow dr=tbl.NewRow();
dr[0]=文件;
对于(int-cIndex=1;cIndex+1
在这里,b.ToString()不返回任何内容(如NULL)。前面我使用GetAllLines()时,它返回:

文件名:fileNameStore:storeQuantity:quantityfileName:fileNameStore:1000数量:30

事情就是这样

我的想法是,也许我已经做到了,所以我只导入了一个大的长字符串,所以当我跳过第一行时,它会变为NULL


但这是我有史以来第一个C#代码,所以我很难弄明白这一点

你可以这样做,虽然不漂亮,但会奏效:)


您当前的算法没有问题:

string[] lines = System.IO.File.ReadAllLines(file);
lines = lines.Skip(1).ToArray();
只需确保导入下面的名称空间

using System.Linq;

好的,用一些代码示例和更具描述性的解释来扩展我的注释。我建议您使用
StreamReader

using ( StreamReader reader = new StreamReader(File.OpenRead(filePath)) )
{
现在忽略第一行:

    reader.ReadLine();
继续你的阅读逻辑:

    string line = string.Empty;
    while ( ( line =  reader.ReadLine() ) != null )
    {
        // your logic
    }
}
如果需要将这些行“打包”到数组中,您只需在逻辑的开头和内部创建一个
列表
,使用
列表。添加(string)
方法,并将
作为字符串参数。然后您可以使用
List.ToArray()
方法返回行数组。

我将使用而不是
文件。ReadAllLines()
。因为它是延迟加载文件的。你最好不要使用
.ToArray()
.ToList()
,因为它会将整个文件保存到内存中

这将使数据流化

foreach(var line in File.ReadLines(file).Skip(1))
{

}

将完成工作…

这也可以通过以下代码实现:

var lines = File.ReadAllLines(csv_file_path).Skip(1).Select(a => a.Split(';',',')).ToList();

为什么不直接使用
StreamReader
并首先调用
reader.ReadLine()
忽略第一行,然后每隔一行处理一次?您确定添加了对System.Linq命名空间的引用吗?不要询问您对错误的解释,研究实际错误。
System.IO.File.ReadLines(File)
不返回1个字符串。使用此技术,我最近发现我的表将返回空值。早些时候,它是一个“完整”表,第一行是标题。有什么想法吗?@Cenderze你能用错误日志更新你的答案吗?我没有收到错误,但我用来创建数据表的代码返回空表。我可以在几分钟内编辑我使用的代码。谢谢你把这个问题重新布线。@Cenderze当然可以。没问题。我现在已经更新了OP,知道了可能的错误,我已经尝试用谷歌搜索解决方案至少有一段时间了。谢谢回复。它非常整洁,只有一行代码!
var lines = File.ReadAllLines(csv_file_path).Skip(1).Select(a => a.Split(';',',')).ToList();