用逗号读取文本文件

时间:2016-10-12 04:44:12

标签: c

我正在尝试使用fscanf从infile(stdin或文件)读入一个代表如下的文件:

1,2,3
4,5,6

请忽略它们是数字的事实 - 我将它们表示为字符串。

我做的是我用过

fscanf(infile, "%s%*c %s%*c %s%*c[^\n]", x, y, z); where x, y, z are string variables. 

我希望该行上的每个代表数字都存储在x,y,z中,但它不起作用,而是将整行存储在x中。

请帮忙吗?感谢。

2 个答案:

答案 0 :(得分:1)

您正在使用'%s',它会将整个单词读取到空格。因此res = requests.post( "{hostname}/nifi-api/process-groups/{destination_process_group}/templates/upload".format( **args ), files={"template": open( file_path, 'rb')} ) 会在1,2,3中读取第一行。

您需要做的是将xxy作为整数,然后您可以读取三个整数并使用各种方法将其转换为字符串(例如{ {1}}

z

答案 1 :(得分:0)

如果您必须使用scanf / fscanf,那么您希望使用%[^,]作为输入格式化程序而不是%s%s会贪婪阅读尽可能多的内容; %[^,]将读取由不是,的字符(包括空格)组成的字符串:

fscanf(infile, "%[^,],%[^,],%[^,]", x, y, z);

请注意,fscanf的上述用法是不安全,因为它不会限制每个字符串中读取的字符数。因此,它完全容易受到缓冲区溢出攻击。

就个人而言,我会使用fgets(或getline,如果可用)阅读整行,然后使用,strtok上对其进行标记。 scanf/fscanf are notoriously hard to use correctly通常应该避免。