2010-05-16 4 views
-1

Каков наилучший способ извлечения нескольких (~ 40 значений) из текстового файла с использованием php?извлечение нескольких полей из текстового файла с помощью php

данные более или менее, как:

NAMEA     valuea 
NAMEB     valueb 

Я ищу для правильного подхода к * извлечения этих данных в структуры данных, потому что мне нужно будет указать regexs для всех из них (все 40).

я сделал себе ясно?

* Значение, по умолчанию/болезненный метод был бы для меня сделать:

$namea = extractfunction("regexa", $textfilevalue); 
$nameb = extractfunction("regeb", $textfilevalue); 

... 40 раз!


Линии могут быть не в том же порядке или быть в каждом файле. Каждый НАМЕА является текст как: «Регистрационный номер:», или «Заявитель Имя:» (то есть, с пробелами в том, что я звонил в НАМЕА)


Ответ на Col.

Я ищет разумный «способ» писать свой код, поэтому его читаемый, модифицируемый, строит объект/массив, который легко можно вызывать, и т. д. «хороший стиль кодирования!». :)


@Adam - Они на самом деле ... и содержат косую черту, а также ...


@Alix - Freaking чудесный человек! Это было хорошо! не могли бы вы также понять, как я могу «обрезать» массив rsultant, удалив все из «key_x» и дальше? Должен ли я открыть это как новый вопрос?

+0

что это значит "мне нужно будет указать regexs для всех из них (все 40)"? вы не можете поставить одно регулярное выражение для всех значений? но почему? что в них слишком сложно? Разве это не просто пространственные разделительные значения? –

+0

да, напишите 40 регулярных выражений –

+1

Без спецификаций или текста в реальном примере, почти невозможно ответить на ваш вопрос. –

ответ

1

Вот мое взятие на него:

somefile.txt:

NAMEA     valuea 
NAMEB     valueb 

PHP код:

$file = file_get_contents('./somefile.txt'); 
$string = preg_replace('~^(.+?)\s+(.+?)$~m', '$1=$2', $file); 
$string = str_replace(array("\r\n", "\r", "\n"), '&', $string); 

$result = array(); 

parse_str($string, $result); 

echo '<pre>'; 
print_r($result); 
echo '</pre>'; 

Выход:

Array 
(
    [NAMEA] => valuea 
    [NAMEB] => valueb 
) 

Вы также можете иметь возможность еще больше упростить это с помощью str_getcsv() на PHP 5.3+.


EDIT: Моя предыдущая версия не выполняется для ключей, которые имеют пробелы как @Col. Шрапнель заметила. Я не читал вопрос с достаточным вниманием. Возможным решением, так как вы, кажется, с помощью клавиш, которые всегда имеют : прилагаемую это:

$string = preg_replace('~^(.+?):\s+(.+?)$~m', '$1=$2', $file); 

Чтобы удалить все от key_x до конца файла, который вы можете сделать что-то вроде этого:

$string = substr($string, 0, strpos($string, 'key_x')); 

Так что все это будет выглядеть следующим образом:

somefile.txt:

Registration Number:     valuea 
Applicant Name:     valueb 

PHP код:

$file = file_get_contents('./somefile.txt'); 
$string = substr($file, 0, strpos($file, 'key_x')); 
$string = preg_replace('~^(.+?):\s+(.+?)$~m', '$1=$2', $string); 
$string = str_replace(array("\r\n", "\r", "\n"), '&', $string); 

$result = array(); 

parse_str($string, $result); 

echo '<pre>'; 
print_r($result); 
echo '</pre>'; 

Выход:

Array 
(
    [Registration_Number] => valuea 
    [Applicant_Name] => valueb 
) 
+1

(т. Е. С пробелами в том, что я называл NAMEA) - внимательно прочитайте вопрос. –

+0

@Col. Шрапнель: В самом деле, я не прочитал весь вопрос вначале. Благодаря! –

+0

Спасибо Аликс - чудесно ответил! Обращался каждый раз, работает чудесно !! – Dave

0

Насколько я понял, вы можете использовать файл(), чтобы получить массив строк, а затем проанализировать эти строки с некоторым регулярным выражением.

если добавить знак = между именами и значениями, вы будете BLE, чтобы получить все это сразу, используя parse_ini_file()

0

Предполагая, что ключи (НАМЕА, NAMEB) никогда не имеют места в них:

$contents = file('some_file.txt'); // read file as array 
$data = array(); 
foreach($contents as $line) { // iterate over file 
    preg_match('/^([^\s]+)\s+(.*)/', $line, $matches); // pull out key and value into $matches 

    $key = $matches[1]; 
    $value = $matches[2]; 

    $data[$key] = $value; // store key/value pairs in $data array 
} 

var_dump($data); // what did we get? 
Смежные вопросы