Я написал в файл (с помощью 'FWRITE()') следующее:Как я могу прочитать и получить разделенные данные из файла, используя 'fread' в C?
TUS�ABQ���������������(A����������(A��B������(A��B���A��(A��B���A������B���A������0����A������0�ABQ�������0�ABQ�����LAS����������������A�����������A��&B�������A��&B��B���A��&B��B������&B��
B����153���B����153�LAS�����153�LAS�����LAX���������������:A����������:AUUB������:AUUB��B��:
AUUB��B����UUB��B����������B��������LAX���������LAX�����MDW���������������A����������A��(�������A��(����A��A��(����A������(����A����A�89���A����A�89MDW�����A�89MDW�����OAK���������
����������������������@�����������@�����������@�����������@�������������������������OAK���������OAK�����SAN���������������LA����������LA��[email protected]������LA��[email protected]��@A��LA��[email protected]��@A������[email protected]��@A����������@A��������SAN���������SAN�����TPA�ABQ����������������B�����������B��@�����...(continues)
, которое переводится на это:
TUSLWD2.103.47.775.1904.06.40.03AMBRFD4.63.228.935.0043.09.113.0ASDGHU5.226.47.78.3.26...(The same structure)
и шестнадцатеричного этого будет:
00000000 54 55 53 00 41 42 51 00 00 00 00 00 00 00 00 00 |TUS.ABQ.........|
00000010 00 00 00 00 00 00 28 41 00 00 0e 42 00 00 f8 41 |......(A...B...A|
00000020 00 00 00 00 4c 41 53 00 00 00 00 00 00 00 00 00 |....LAS.........|
00000030 00 00 00 00 00 00 88 41 00 00 26 42 9a 99 11 42 |.......A..&B...B|
(Continues...)
структура, всегда 2 слова 3-х символов каждого из них (т.е. ТУС и LWD) с последующим 7-поплавков, а затем повторить s снова до конца файла.
Главное: Я просто хочу, чтобы прочитать все поля, разделенные как «ТУС», «КВБ», «2.10», «3.4», «7.77» ...
И я могу использовать только ' fread() 'для этого! Сейчас я пытаюсь это:
aux2 = 0;
fseek(fp, SEEK_SET, 0);
fileSize = 0;
while (!feof(fp) && aux<=2) {
fread(buffer, sizeof(char)*4, 1, fp);
printf("%s", buffer);
fread(buffer, sizeof(char)*4, 1, fp);
printf("%s", buffer);
for(i=0; i<7; i++){
fread(&delay, sizeof(float), 1, fp);
printf("%f", delay);
}
printf("\n");
aux++;
fseek(fp,sizeof(char)*7+sizeof(float)*7,SEEK_SET);
aux2+=36;
}
И я получаю этот результат:
TUSABQ0.0000000.0000000.00000010.5000000.0000000.00000010.500000
AB0.0000000.000000-10384675421112248092159136000638976.0000000.0000000.000000-10384675421112248092159136000638976.0000000.000000
AB0.0000000.000000-10384675421112248092159136000638976.0000000.0000000.000000-10384675421112248092159136000638976.0000000.000000
Но это не работает правильно ...
* Примечание: забыть аргументы последний 'fseek()', потому что я пытался слишком много бессмысленных вещей! Для записи слов (т.е. Тус) в файл, я использую это:
fwrite(x->data->key, 4, sizeof(char), fp);
и писать поплавки, это:
for (i = 0; i < 7; i++) {
fwrite(¤t->data->retrasos[i], sizeof(float), sizeof(float), fp);
}
"* слова из 3 символов *": Почему '... * 4 ...'. Это должно быть 'fread (buffer, sizeof (char) * 3 ...' или даже «nicer» 'fread (buffer, sizeof (char), 3, ...' – alk
cos, когда я сохранил их в файле, каждый у одного есть символ окончания '\ 0', поэтому я пытаюсь его прочитать @alk – wj127
Из дампа, который вы показываете ('TUSABQ ...'), похоже, что завершающий '\ 0'' не написан в файл. Возможно, покажите нам * clean * hex-dump файлов, созданных с помощью соответствующего демпингового инструмента, такого как 'hexdump'. – alk