2014-12-02 7 views
0

Предположим, что у меня есть набор данных, расположенных следующим образомэкранным две разные строки одновременно в C

19 10 1 1 
12 15 1 1 
13 12 4 5 
10 5 2 3 
... 

и так далее, на определенной итерации в цикле я должен читать только 1-й и 4-й строки и в следующей итерации я должен получить доступ к какому-либо другому набору строк, например

1st iteration: 

1st row: 19 10 1 1 
4th row: 10 5 2 3 

я будет доступ к своим данным с помощью функции fscanf(). Но как я могу гарантировать, что я выбираю только 1-ю и 4-ю строки или любые две строки, если на этой задаче?

(я не считать чтение его в 2D массив, так как размер набора данных 10^8)

Спасибо.

+0

прочитайте свой ввод в массив 2d, затем получите доступ туда, где хотите. На что ты застрял? –

+0

Я не хочу этого делать, поскольку размер моего набора данных составляет 10^8, поэтому он становится очень медленным. – Thejas

+1

, если вы хотите иметь доступ к «любым двум строкам на заданной итерации», вы должны где-то их хранить. 10^8 не так велика, как вы думаете. Чтение из файла вместо памяти гарантировано намного медленнее. –

ответ

3

Когда вы читаете свои данные (скажем, хранятся в стандартном файле), получите смещения байтов для строк, ища разделители строк (символ новой строки). Затем вы можете считывать строки на основе смещения начального и конечного байтов с помощью арифметики C-указателей на FILE * и fseek(). Хранение нескольких байтовых смещений (восемь байт long или их эквивалент, часто) дешево.

+0

Извините, Алекс, я не мог понять эту технику. Не могли бы вы уточнить? (Я все еще новичок с минимальными знаниями) – Thejas

+1

Если ваша таблица данных хранится в файле, просмотрите файл для символов новой строки (при условии, что это разделитель строк на вашей платформе) и сохраните смещения в массиве. Если вам нужна строка 'N', вы получаете начальное смещение' N' и конец смещения 'N + 1' и считываете байты между этими смещениями с помощью' fseek() '. –

Смежные вопросы