有人能用C语言向我解释这种格式吗?
with open('NoBench.csv') as csvfile :
readCSV = csv.reader(csvfile, delimiter=',')
n=0
for row in readCSV :
if n == 0 :
n+=1
try:
visuals[0].append([float(row[3]),float(row[5]),float(row[7]),float(row[9]),float(row[11]),float(row[13]),float(row[15]),float(row[17]),float(row[19]),float(row[21]),float(row[23]),float(row[25]),float(row[27]),float(row[29]),float(row[31]),float(row[33]),float(row[35]),float(row[37]),float(row[39]),float(row[41]),float(row[43])])
visuals[1].append([float(row[2]),float(row[4]),float(row[6]),float(row[8]),float(row[10]),float(row[12]),float(row[14]),float(row[16]),float(row[18]),float(row[20]),float(row[22]),float(row[24]),float(row[26]),float(row[28]),float(row[30]),float(row[32]),float(row[34]),float(row[36]),float(row[38]),float(row[40]),float(row[42])])
except ValueError:
continue
我不明白fscanf(file_name,"%20[^\n]%*20c%ld%*c%d%*16c",name,&idE,&cod);
的含义。
答案 0 :(得分:4)
如评论中所述,%20[^\n]
扫描集转换规范意味着代码将读取不超过20个不是换行符的字符,null终止字符串(必要时使用第21个字节)。扫描集转换在]
处完成 - 当您需要在扫描集中包含]
时,有一些特殊规则。有关详细信息,请参阅POSIX scanf()
手册。
请注意,有各种情况。首先,扫描集不会跳过前导空格(加%c
和%n
是唯一不会跳过空格的三种转换规范。)
假设下一个字符是换行符:转换失败,因为必须至少有一个匹配它的字符才能成功。
假设接下来的几个字符不是换行符,但在读取20个字符之前有一个换行符。这些字符将被读入字符串,该字符串将以空值终止。
或者,假设接下来的几个字符不是换行符,但在第20个字符后面有一个换行符(立即)。字符串中将有20个字符被读取,加上一个空终止符,换行符将由格式字符串的下一部分处理。在问题中,那是%*20c
,这意味着“读取20个字符,包括空格,但不分配给任何变量”。如果字符为%*20c
而不是c
,则c
的匹配将失败;下一个字符是换行符。你知道因为scanf()
只返回1而不是2或更多。
另一种选择是有超过20个非换行要阅读;其中20个将保存到与扫描集关联的变量中,以下字符将与格式字符串中的后续字符或转换规范匹配(或不匹配)。