edit: обновлено в соответствии с вашими требованиями.
Хотя ваш файл имеет переменную длину, а данные - нет, вы можете использовать fscanf и сделать что-то вроде этого:
while(fscanf(file,"PP%*6d%4d", ×tamp, &low, &medium, &high))
{
for(int i = 0; fscanf(file, "D%3d%3d%3d", &low, &medium, &high); i++)
{
timestamp=timestamp*100+i*15;
//Do something with variables (e.g. convert to string, push into vector, ...)
}
}
Обратите внимание, что при этом данные считываются в целые числа (временная метка, low, medium и high - целые числа), строковая версия выглядит следующим образом (timestamp, low, medium и high - массивы символов):
int first[] = {'0', '1', '3', '4'};
int second[] = {'0','5'};
while(fscanf(file,"PP%*6d%4c", ×tamp, &low, &medium, &high))
{
for(int i = 0; fscanf(file, "D%3c%3c%3c", &low, &medium, &high); i++)
{
timestamp[i][4]=first[i%4];
timestamp[i][2]=second[i%2];
}
}
edit: еще несколько пояснений о строке форматирования, с %*6d
Я имею в виду: найдите 6 цифр и отбросьте их (* означает: не вводите переменную). %4d
или %4c
означает в этом контексте то же самое (поскольку 1 цифра будет одним символом), но мы сохраняем их в соответствующих переменных.