[英]How to read a text file and add the data to a int array in C#?
我正在嘗試讀取一個文本文件,其中包含用逗號分隔的數字。 當我使用File.Readline()
閱讀時,將其獲取到一個string[]
。 我需要將其轉換為一個int數組,但是會出現錯誤。
文本文件的內容:
146429,143689,144380,141523,139572,136930,133714,130011,125843,121110,115974,110363,104367,97909,91245,84218,77008,69626,62058,54445,46942,39436,32146,24932,18359, 12601,9039,9776,13638,18314,23221,27728,32142,35941,39577,42657,45692,48180
我的代碼:
while ((line = sr.ReadLine()) != null)
{
string[] values = line.Split(new string[] { " , " }, StringSplitOptions.None);
for (int i = 0; i < values.Length; i++)
{
// Console.WriteLine(values[i]);
valArr[LineCount][i] = Convert.ToInt64(values[i]); // error
}
LineCount++;
}
我認為這是您追求的目標:
static void Main(string[] args)
{
var sr = new StreamReader(@"d:\test.txt");
long[] data = ExtractData(sr).ToArray();
}
private static IEnumerable<long> ExtractData(StreamReader sr)
{
string line;
while ((line = sr.ReadLine()) != null)
{
var items = line.Split(',');
foreach (var item in items)
{
yield return Convert.ToInt64(item);
}
}
}
我的測試文件(d:\\ test.txt)保持在:
1,2,3,4,5
1,2,3,4
我得到包含的數組:
1,2,3,4,5,1,2,3,4
正如夢露指出的那樣,我錯過了您想要一個數組的事實。 這是另一個提供這種鋸齒狀數組的版本。 雖然仍然保持產量;)
static void Main(string[] args)
{
var sr = new StreamReader(@"d:\test.txt");
var data = ExtractData(sr).ToArray();
}
private static IEnumerable<long[]> ExtractData(StreamReader sr)
{
string line;
while ((line = sr.ReadLine()) != null)
{
yield return line.Split(',').Select(i => Convert.ToInt64(i)).ToArray();
}
}
使用List
可以幫助您,並使用StringSplitOptions.RemoveEmptyEntries
來防止Convert.ToInt64
null exception
var lineArray = new List<List<Int64>>();
foreach (var lineString in File.ReadAllLines("path"))
{
var line = new List<Int64>();
string[] values = lineString.Split(new[] { ',', ' ' },
StringSplitOptions.RemoveEmptyEntries);
line.AddRange(values.Select(t => Convert.ToInt64(t)));
lineArray.Add(line);
}
並使用它:
// Array of numbers for specific line
var resultArray = lineArray[lineNumber].ToArray();
應該接近:
int yourIntArray =
new List<string>(RealAllText(fileName)
.Split(new char[] {',', '\r', '\n', ' '},
stringSplitOptions.RemoveEmptyEntries))
.ConvertAll<int>(s => int.Parse(s))
.ToArray();
當然,為了獲得更高的魯棒性,應將int.Parse
替換為可處理數字錯誤的某種方法,以此類推...
編輯:
哦,我剛剛看到您的行是數組的另一個索引...那么,在這種情況下,應修改此代碼,但我將留給您。
我想這就是你想做的。 唯一的事情是您的vallArr應該是可以保留所有值的二維數組。 像var valArr = new Int64 [x,y];
while ((line = sr.ReadLine()) != null)
{
string[] values = line.Split(new string[] { " , " }, StringSplitOptions.None);
for (int i = 0; i < values.Length; i++)
{
valArr[LineCount, i] = Int64.Parse(values[i]);
}
LineCount++;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.