从C中用分号分隔的文本文件中读取不同的数据
在C语言中,如何将用分号分隔的不同数据记录读入数组 从文本文件:文本一;12.25; 文本二;5.文本三;1.253从C中用分号分隔的文本文件中读取不同的数据,c,text,file,input,C,Text,File,Input,在C语言中,如何将用分号分隔的不同数据记录读入数组 从文本文件:文本一;12.25; 文本二;5.文本三;1.253 一种方法是使用。然后在int或float中键入结果。通常的建议是读取整行内容,然后用sscanf或strtok或其他方法对其进行解析。如果直接从输入文件中搜索,则很容易丢失在输入文件中的位置。i、 e.当某些内容第一次不匹配时,您需要一种跳过它的方法,除非您只想在那里中止。我将使用fgets从文件中读取一行,strtok在分号上打断它,strcpy复制字符串,strtod转换为d
一种方法是使用。然后在int或float中键入结果。通常的建议是读取整行内容,然后用sscanf或strtok或其他方法对其进行解析。如果直接从输入文件中搜索,则很容易丢失在输入文件中的位置。i、 e.当某些内容第一次不匹配时,您需要一种跳过它的方法,除非您只想在那里中止。我将使用fgets从文件中读取一行,strtok在分号上打断它,strcpy复制字符串,strtod转换为double,strtol转换为long,然后向下转换为整数 或者,读取该行并使用状态机遍历每个字符并执行正确的操作。例如,您要将每个字符复制到firstText中,直到达到分号,然后使用strtod吃双精度,跳过分号,将字节复制到secondText,等等 或者,使用单个scanf格式字符串将行分解为所有字段
fscanf(myFile, " %[^;];%lf;%[^;];%d;%[^;];%lf",
myRecords[i].firstText,
&myRecords[i].myDouble1,
myRecords[i].secondText,
&myRecords[i].myInt1,
myRecords[i].thirdText,
&myRecords[i].myDouble2);
并且,正如其他人提到的,检查fscanf的返回值
我更喜欢一次读一行,以避免一行不好的行导致后面的所有转换出错。如果将每个字段作为字符串%[^;];,例如,您是否在第二个字段中获得了正确的文本12.25?没有。问题是我正在将其读入具有固定类型的structarray中。我尝试了它,它工作正常。您能显示myRecord结构的定义吗?结构myRecord{char text1[20];双倍价格;char text2[30];int nr;char text3[30];双倍价格2;};怎么会出错?你为什么不检查fscanf的返回值?你的位置怎么容易丢失?跳过该行的其余部分并不困难,如果将当前行抛出错误,则只需执行以下操作:void ignorelineFILE*f{char c;for;;switch fgetcf{case'\n':case EOF:return;default:;}。
fscanf(myFile, " %[^;];%lf;%[^;];%d;%[^;];%lf",
myRecords[i].firstText,
&myRecords[i].myDouble1,
myRecords[i].secondText,
&myRecords[i].myInt1,
myRecords[i].thirdText,
&myRecords[i].myDouble2);