MyTetra Share
Делитесь знаниями!
Простые заготовки парсеров стандартного ввода для Russian Code Cup на PHP
Время создания: 02.06.2013 13:36
Раздел: Компьютер - Программирование - Язык PHP
Запись: xintrea/mytetra_syncro/master/base/13701658196oqvgb4eir/text.html на raw.github.com

В Russian Code Cup входные данные передаются через STDIN. Это означает, что определить конец данных невозможно. Поэтому в данных обязательно будет присутствовать:


  • либо количество считываемых данных в самой первой строке
  • либо "терминирующая" последовательность данных в последней строке (обычно все нули)



Если нужно считать поток, в котором сразу указано количество данных


Пример файла:


3

124 5679

9878 765

654 876


Пример кода:


// Считывание первой строки

$line=trim(fgets(STDIN));

$par=explode(' ', $line);


// Выяснение сколько строк надо загрузить

$n=(int) trim($par[0]);


// Загрузка строк в массив чтобы дальше было удобнее работать

$lines=array();

for($i=0; $i<$n; $i++)

{

$line=trim(fgets(STDIN));

$par=explode(' ', $line);


$lines[$i]['a']=trim($par[0]);

$lines[$i]['b']=trim($par[1]);

}


// Проверка считанных данных

for($i=0; $i<count($lines); $i++)

echo 'A: '.$lines[$i]['a'].' B: '.$lines[$i]['b']."\n";


Если нужно считать поток с терминирующей последовательностью


Пример файла:


124 5679

9878 765

654 876

0 0


Пример кода:


$lines=array();

$i=0;

while(true)

{

$line=trim(fgets(STDIN));

$par=explode(' ', $line);


if($par[0]=='0' and $par[1]=='0')

break;

$lines[$i]['a']=trim($par[0]);

$lines[$i]['b']=trim($par[1]);

$i++;

}


// Проверка считанных данных

for($i=0; $i<count($lines); $i++)

echo 'A: '.$lines[$i]['a'].' B: '.$lines[$i]['b']."\n";


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования