【发布时间】:2012-03-17 14:24:03
【问题描述】:
我正在尝试将文件的内容提取到矩阵中,但文件的外观可能完全不同。
例如,所有这些文件都应该给出相同的结果:一个包含 1、2、3、4、5、6、7、8、9 的 3x3 矩阵。
1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 8 9
1 2 3 4
5
6
7 8
9
1 2 3
$something
$something else
4 5 6
$something else else
7 8 9
希望我事先知道矩阵的维度以及指示在当前过程中忽略这些行的“$”字符。
我当前使用 fscanf 的算法效果很好,但它不能用于“$something”行。
我认为我应该使用 fgets/strtok/sscanf 方法,但存在一些问题。
// File* file (already assigned)
char line[32]; //assuming 32 is enough
char* token;
fgets(line,32,file);
token = strtok(line," \t");
for (y=0; y<ySize; y++)
{
for (x=0; x<xSize, x++)
{
if (token[0] == '$') //should use a str function
{
fgets(line,32,file);
token = strtok(line," \t")
x--;
}
else
{
if (we are at the end of the line)
{
fgets(line,32,file);
token = strtok(line," \t")
}
sscanf(token,"%d",&matrix[x][y];
token = strtok(NULL," \t");
}
}
}
基本上,我想在编写“如果(我们在行尾)”条件和一些关于我的方法的输入方面得到一些帮助,它完美无缺吗?我是否正确地考虑了这个过程?
谢谢。
【问题讨论】:
-
看看
strtol()。您可以使用第二个参数来设置贯穿整行的调用链。 -
cmets 是否只有完整的行,还是允许使用像
1 2 $ignore这样的行? -
1 2 $ignore 是不可能的。但基本上我每次只需要调用'token == $'(仍然需要对令牌和所有内容进行一些研究)。 1 $ignore 2 也不可能。