PHP — синтаксический анализ текстового файла

#php #arrays #file #parsing #text-files

#php #массивы #файл #синтаксический анализ #текстовые файлы

Вопрос:

я хотел бы проанализировать этот файл:

 Case    Given       Predicted
No      Class       Class
1       ?               0               [0.80]
2       ?               0               [0.80]
3       ?               0               [0.80]
4       ?               1               [0.75]
5       ?               0               [0.80]
6       ?               0               [0.80]
7       ?               1               [0.75]
8       ?               0               [0.80]
9       ?               0               [0.80]
10      ?               0               [0.80]
11      ?               1               [0.75]
12      ?               0               [0.80]
13      ?               0               [0.80]
14      ?               0               [0.80]
15      ?               0               [0.80]
16      ?               0               [0.80]
17      ?               0               [0.80]
18      ?               0               [0.80]
19      ?               0               [0.80]
20      ?               0               [0.80]
  

В частности, я хочу брать значения из третьего столбца («Прогнозируемый класс»).Я открываю файл благодаря:

 $txt_file    = file_get_contents('simone.result');
$array        = explode("n", $txt_file);
array_shift($array);
array_shift($array);
array_shift($array);
  

И у меня есть это:

 Array ( [0] => 1 ? 0 [0.80] [1] => 2 ? 0 [0.80] 
  

Хорошо, это правильно. Но я хочу только третье значение («0» или «1») в каждом ключе этого массива. Кто-нибудь может мне помочь, пожалуйста?

Большое вам спасибо!

Комментарии:

1. что такое разделитель столбцов? пара пробелов?

2. Я не знаю. Он создается автоматически. Я думаю, что это ВКЛАДКА.

3. -1 для «я не знаю». это ВАША программа, и вы ДОЛЖНЫ знать свои данные, прежде чем обращаться к другим людям за помощью.

4. @Coll.Shrapnel Я не понимаю, почему -1. Вопрос был «что такое разделитель столбцов? Пара пробелов?» и мой ответ был таков, потому что этот файл автоматически создается в результате алгоритма. Так что я не знаю, является ли это разделителем столбцов или чем-то еще. Он генерируется автоматически. 🙂

5. Вы говорите глупости. «автоматически сгенерированный» не является оправданием. Не имеет значения, кто сгенерировал этот файл. У вас есть этот файл для работы. У вас это есть. И вам нужно знать разделитель, чтобы решить вашу задачу. Итак, вы должны исследовать это. Никто не может этого сделать, кроме вас.

Ответ №1:

 $lines = file('simone.result');
$column3 = array();
for( $i = 2, $ilen = count( $lines ); $i < $ilen; $i   )
{
    $columns = preg_split( '/s /', $lines[ $i ] );
    $column3[] = $columns[ 2 ];
}

var_dump( $column3 );
  

Комментарии:

1. Нет результата от «var_dump ($ column3)»;

2. Я не знаю, почему. Я думаю, вы правы, но в моем скрипте это не работает, я всегда получаю эту глупую пустую страницу!

3. @Andre: активировать отображение ошибок: ini_set( 'display_errors', true ); и установить высокий уровень ошибок : error_reporting( E_ALL | E_STRICT ); . Поместите эти две строки в начало вашего скрипта (только на компьютере разработчика) и сообщите нам, если на вашем экране появятся сообщения об ошибках.

4. Хорошо … в скрипте был какой-то неправильный код. Извините за потерю времени, чувак. Большое спасибо. Я действительно ценю это!!

Ответ №2:

Почему бы просто не разбить вашу строку на пробел и использовать нужное вам значение?

Комментарии:

1. Я пробовал это. Но, похоже, это не работает. $array2 = explode(» «; $array); print_r ($array2); Если я напечатаю $array2, я получу пустую страницу.

2. почему вы поставили точку с запятой между аргументами? неудивительно, что вы получаете пустую страницу с этим ^^

Ответ №3:

Что-то вроде этого?

 foreach( $array as $key => $value ) {
    $split = explode( " ", $value );
    $array[$key] = $split[2]; 
}
  

Комментарии:

1. Что дает пустую страницу? var_dump( $array)?

Ответ №4:

извлеките все строки файла

 $lines = file($txt_file);
  

затем выполните цикл над ними:

 foreach($lines as $line ) 
{
    list($v1,$v2,$v3,$v4) = explode("n", trim($line)); //assuming separator is a space t for tab

    //take the values you need here
    $tmp[] = $v3;

}

print_r($tmp);
  

также это работает, если файл хорошо написан 🙂

Комментарии:

1. @Coll .Shrapnel добавил комментарий

2. @Andre: это был всего лишь пример того, как лучше переписать ваш код (избегая 3 array_shifts), я уверен, что он работает нормально. Все зависит от того, как записан ваш файл. ЕСЛИ разделителем является табуляция (t), пробел (n) или что-то еще..

3. я хотел бы знать, почему у меня есть -1, поскольку это прекрасное решение проблемы..