我有一个看起来像这样的文件:
0 4 5
6 9 9

等,每行有三个数字,用制表符分隔。我有一个来自文件的行数组:
string[] lines = File.ReadAllLines(theFile);

对于每一行,我调用一个函数,其结果是返回一个整数数组。以下是我的代码现在的样子:
public int[] getPoint(string line)
{
int xlength= line.IndexOf(" "); //find location of first white space
int x= Int32.Parse(line.Substring(0, xlength)); //find x-coordinate and turn it from a string to an int
int ylength = line.IndexOf(" ", xlength); //find next white space
int y = Int32.Parse(line.Substring(xlength + 1, ylength)); //y-coordinate starts after first white space and ends before next
int z = Int32.Parse(line.Substring(ylength + 1, line.Length)); //z starts after 2nd white space and goes through end of line
return new int[] { x, y, z }; //return a new point!
}

我的问题在于IndexOf(字符串)函数。它无法识别标签。我怎么能写这个,以便每个我的getPoint功能实现其目的?谢谢。
答案 0 :(得分:1)
尝试将IndexOf()
与标签一起使用,而不是使用空格:
int xlength= line.IndexOf("\t"); //"\t" - to find tabs
此外,请在每次"\t"
来电中使用IndexOf()
。
答案 1 :(得分:0)
如何使用Split和Linq以及LinqPad
void Main()
{
var lines = new List<string> { "0\t4 5", "6\t9\t9" };
lines.Select(l => GetPoint(l)).Dump();
}
static int[] GetPoint(string s)
{
var values = s.Split(new[] {' ', '\t'}, StringSplitOptions.RemoveEmptyEntries);
return values.Select(v => int.Parse(v)).ToArray();
}
当然你会用
File.ReadLines("path").Select(l => GetPoint(l)).Dump();
答案 2 :(得分:0)
请尝试使用ReadLines
方法。 RealLines
将按要求逐行读取文件。另外,请尝试使用Split
方法。如果找到的字符串不能解析为int
,我还会添加错误处理。以下是一些指导您的代码,但您可能需要根据自己的需要进行调整:
foreach (var thisLine in File.ReadLines(theFile))
{
int[] point = getPoint(thisLine);
}
public int[] getPoint(string line)
{
// Split by tab or space
string[] portions = line.Split(new char[] { ' ', '\t' });
int x = Int32.Parse(portions[0]); //find x-coordinate and turn it from a string to an int
int y = Int32.Parse(portions[1]); //y-coordinate starts after first white space and ends before next
int z = Int32.Parse(portions[2]); //z starts after 2nd white space and goes through end of line
return new int[] { x, y, z }; //return a new point!
}
答案 3 :(得分:0)
要为上述建议添加一些额外容量,您可以使用Regex.Matches(),如下所示:
string line = "1\t-25\t5";
var numbers = Regex.Matches(line, @"-?\d+");
foreach (var number in numbers)
Console.WriteLine(number);
然后将这些数字解析为整数。
这有两个好处。