【发布时间】:2016-02-16 21:36:55
【问题描述】:
我怎样才能像这样解析文本文件: 免责声明:我不能假设我知道文本文件的内容这只是一个示例文本文件
10X16 de4 dw9 ds11 g10,7 M3,4 h6,5 p2,2 M8,5 G2,10
12X20 de7 dw10 dn13 g9,10 M7,8 h6,5 p2,2 M8,5 G2,10
这个文本文件的意思是有一个房间,尺寸为10X16,东墙上有一扇门de4在第四位置,g10,7表示位置10Y有一个小金子和7X...我不想存储任何字母,这些字母只是为了告诉我正在读取的数字的用途。我想将数字存储到int变量中,根据它是什么:黄金、怪物、药水等。
我需要将10 存储为Y 值和16 作为X 值,并且维度之后的其他元素存储在不同的变量中。
这是我的代码:
int main(int argc, char *argv[]) {
//open file and read
FILE *file = fopen(argv[1], "r");
char line[150];
char *dim;
int X = 0;
while (fgets(line, 150, file) != NULL) {
dim = strtok(line, "X");
X = atoi(dim);
printf("%d\n", X);
//parse other elements here?
...
}
fclose(file);
return 0;
}
例如,我希望将变量 char *roomY 中的 10 和 char *roomX 中的 16 和 4 存储在变量 char *eastDoor 中,这些变量稍后将全部转换为 int 值.
像g10,7 这样的元素我希望将10 存储为Y 值和7 作为该元素的X 值。
我还应该补充一点,应该使用字母来确定值是什么。
例如可以使用if (string[i] = "d") 路径。
我尝试使用strtok(roomY, "X") 获取X,然后使用int Y = atoi(roomY) 将char 转换为int 值。这仅适用于10,但文件的其余部分无法正确解析。有没有更有效的方法来做到这一点?
【问题讨论】:
-
看看
sscanf。 -
sscanf 不能帮助我从像 g7,10 这样的元素中解析 7 和 10,或者我不确定你的建议是什么。
-
为什么不呢?
sscanf("g7,10", "g%d,%d", &a, &b)会给你 a=7 和 b=10。 -
对不起,我应该指定我不能假设文本文件的内容
-
我确信数据可以改变。格式一致吗?如果格式发生变化,那么很可能没有多少代码可以解决问题。