#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, поскольку это прекрасное решение проблемы..