2010-03-28 2 views
1

Мое намерение состоит в том, чтобы читать каждые элементы во 2-й колонке в buffer[] из следующего .txt файла:Как перенести указатель файла в определенное место с помощью fseek()?

9992891234 09,920 15,771 11,909
9992345971 07,892 12,234 09,234
9992348971 64,567 70,456 50,987
9992348231 89,234 85.890 58,982

меня знает, как сделать это с помощью fscanf():

for (int i=0;i<4;i++) 
    { 
    fscanf(pFile, "%lld", &junk); 
    fscanf(pFile, "%f", &buffer[i]); 
    fscanf(pFile, "%f", &junk); 
    fscanf(pFile, "%f", &junk); 
    } 

Однако, поскольку я выполняю параллельную программу, которая требует, чтобы я использовал разные потоки Windows для чтения разных столбцов, поэтому мне нужно будет прочитать элементы во втором столбце напрямую, используя fseek().

Вопрос в том, что мне следует поместить во 2-й аргумент в fseek() в код ниже, чтобы переместить указатель на файл, чтобы прочитать 2-й элемент 2-й строки?

fscanf(pFile, "%llf", &junk);//<------this is used to skip the 1st data 

    for (int i=0;i<4;i++) 
    { 
      fscanf(pFile, "%f", &buffer[i]); 
      fseek (pFile , ??, SEEK_CUR);//<----how do I calculate this offset? 
    } 
+0

Вам нужно только вызвать fscanf() один раз в строке, пока feof (pFile). –

ответ

4

Файлы имеют только один указатель на чтение. Вы будете вызывать смешное количество условий гонки, если попытаетесь просмотреть несколько потоков из одного и того же файла. Вместо этого один поток должен отвечать за чтение файла, разбор строки и рассылку заданий.

1

Вы должны делать все чтение файла в одном потоке, а затем, если вам действительно нужно выполнить «параллельное программирование» (домашнее задание?), Вы можете иметь отдельные потоки, обращаясь к различным частям данных, которые вы прочитали в память через ваш поток чтения файлов.