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();