Переупорядочение строк в файле - PullRequest
0 голосов
/ 05 января 2012

Я пытаюсь прочитать данные из текстового файла и назначить их массивам.Как я мог прочитать ровно 3 строки за раз, а затем назначить первую строку массиву $ a, вторую строку массиву $ b, третью строку массиву $ c?а затем прочитайте ровно еще 3 строки и т. д.

Ответы [ 5 ]

2 голосов
/ 05 января 2012
$lines    = file('some_file.txt');
$numLines = count($lines);

for ($i = 0; $i < $numLines; $i += 3) {
    $a[] = $lines[$i];
    $b[] = $lines[$i + 1];
    $c[] = $lines[$i + 2];
}

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

1 голос
/ 05 января 2012

Однажды у меня была похожая проблема.Я решаю вот так (в псевдокоде).

counter = 1;

while reading
switch counter
case 1: store in the first array then break;
case 2: store in the second array then break;
case 3: store in the third array, counter = 0, then break;

counter++;

end-while
1 голос
/ 05 января 2012

вы можете использовать что-то вроде этого, например:

$lines = file('filename');
$chunks_array = array_chunk($lines, 3)); - this create array of arrays with 3 lines each

foreach ($chunks_array as $chunks)
{
    $a[] = $chunks[0];
    $b[] = $chunks[1];
    $c[] = $chunks[2];
}
1 голос
/ 05 января 2012

Пример для fgets должен дать вам несколько идей:

http://php.net/manual/en/function.fgets.php#refsect1-function.fgets-examples

1 голос
/ 05 января 2012

Вы можете использовать fseek или file_get_contents с параметром maxlen. Но чтобы прочитать ровно 3 строки, я на самом деле не знаю, если вы не знаете, как долго эти строки.

функция file читает все строки в массив.

Редактировать два: Мог бы прочитать файл побайтово (хотя с моей точки зрения это плохая идея) и остановиться после того, как вы встретите каждый \n или PHP_EOL и использовать счетчик или что-то еще для управления тем, как он используется.

Редактировать один:

Мне только пришла в голову эта идея: вы можете создать пользовательскую потоковую оболочку и обработать чтение строк 3 на 3. Это отличный инструмент для файлов, проверьте http://www.php.net/manual/en/class.streamwrapper.php и управляйте им с помощью контекста или переменных, или чего-либо еще.

Полагаю, вам все равно придется найти алгоритм для этого. Я еще не пробовал, но дайте нам знать, если вы справитесь.

...