我有一个文件,其中的值用逗号分隔,我使用此代码将其加载到字符串数组中。
string test = File.ReadAllText(path).Split(',');
如果我使用类似
的for循环打印该数组for(i=0;i<93;i++;)
{
Console.WriteLine(test[i]);
}
输出打印93项,如果我使i <94,则打印95项。请解释发生了什么,以及如何只打印出94件物品。
答案 0 :(得分:1)
你还在写出94个项目,只是第94个项目中有一个换行符,所以它会写出95行。所以看起来像
的文件1,2,3
4,5,6
将为您的代码生成一个值为1,2,3 \ n4,5和6的数组。其中\ n是换行符。打印出第3个值将导致2行而不是1行,从而使它看起来总共有6个项目,而实际上只有5个。
如果您想分开这些行,您可以执行以下操作
var values = File.ReadLines(path).SelectMany(line=>line.Split(','));
对于上面的示例,将3和4分成单独的项目,如果循环到第3项,则只能得到3而不是3 \ n4。此外,通过使用ReadLines
与ReadAllLines
或ReadAllText
,您不会立即将整个文件加载到内存中。它将一次读取一行,拆分它,然后在迭代生成的IEnumerable<string>
时读取下一行。对于小文件来说并不是什么大不了的事,但是可以避免使用大文件耗尽内存。
答案 1 :(得分:0)
你不应该对数字进行硬编码。 93,94,无论如何。
string[] words = File.ReadAllText(path).Split(',');
foreach (string s in words)
{
System.Console.WriteLine(s);
}
OR(不太喜欢)
string[] words = File.ReadAllText(path).Split(',');
for(i=0;i<words.Length;i++;)
{
Console.WriteLine(test[i]);
}
我会一起避免这一切。
您可以谷歌“C#CVS”并找到许多第三方帮助者。
或者您可以使用此“.Net”(使用VB.NET程序集)(注意,您必须引用Microsoft.VisualBasic.dll)
这
https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.aspx
using (Microsoft.VisualBasic.FileIO.TextFieldParser MyReader = new Microsoft.VisualBasic.FileIO.TextFieldParser("c:\\logs\\bigfile")) {
MyReader.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited;
MyReader.Delimiters = new string[] { Constants.vbTab };
string[] currentRow = null;
//Loop through all of the fields in the file.
//If any lines are corrupt, report an error and continue parsing.
while (!MyReader.EndOfData) {
try {
currentRow = MyReader.ReadFields();
// Include code here to handle the row.
} catch (Microsoft.VisualBasic.FileIO.MalformedLineException ex) {
Interaction.MsgBox("Line " + ex.Message + " is invalid. Skipping");
}
}
}