PHP: загрузка текстового файла и обработка содержимого файла - PullRequest
1 голос
/ 05 августа 2011

У меня есть текстовый файл, содержащий данные / поля, разделенные точным столбцом №.Каждая новая строка представляет новую строку данных.

Пример содержимого файла:

John Chow 26 543 Avenue Street

Из приведенного выше, сначала10 столбцов для названия.Следующие два для возраста.А все остальное для адреса.

Мне нужно отделить эти данные от загруженного файла и отобразить их пользователю в отформатированной таблице, которая впоследствии будет добавлена ​​в базу данных после подтверждения пользователем.

Я новичок в PHP.Я думаю substr может работать.

Пожалуйста, объясните мне, как это сделать.Я использую codeigniter с PHP, но основные шаги в простом PHP сделают.Спасибо

Ответы [ 4 ]

2 голосов
/ 05 августа 2011

Чтение каждой строки файла и анализ строки с substr или регулярным выражением:

$data = array();
$h = fopen($uploadedfile,"r");
while (false !== ($line = fgets($h)))
{
    /* substring way: */
    $data[] = array(
        'name' => trim(substr($line,0,10)),
        'age' => intval(sbstr($line,10,2),10),
        'address' => trim(substr($line,12))
    );

    /* regular expression way: */
    preg_match("'^(.{10})(.{2})(.*)$'",$line,$n);
    $data[] = array(
        'name' => trim($n[1]),
        'age' => intval($n[2],10),
        'address' => trim($n3)
    );
}
fclose($h);

Затем выполните итерацию массива $ data, чтобы отобразить его в виде таблицы.

Редактировать: то, что вы просите в комментариях, можно сделать также с помощью регулярных выражений Если $val является проанализированной 10-символьной строкой, то:

$val = preg_replace("'^0*'","",$val);

заменит все ведущие 0 с.

1 голос
/ 05 августа 2011

Да, вы должны использовать substr.Это извлекает часть строки.Примерно так:

$name = trim(substr($line, 0, 10));
$age = trim(substr($line, 10, 2));
$addr = trim(substr($line, 12));

Я добавил обрезку для удаления лишних пробелов.

0 голосов
/ 05 августа 2011

Вы можете использовать регулярное выражение:

if (preg_match('/(.{10})(.{2})(.{12})/', $input, $output)) {
  var_dump($output);
}
0 голосов
/ 05 августа 2011

Хм Я предлагаю вам не использовать substr, потому что имена людей не всегда будут одинаковой длины, поэтому это создаст некоторые проблемыЯ думаю, что функции explode и implode помогут вам лучше, они разбивают строку на массив и обратно.

<?PHP

$str = "John Chow 26 543 Avenue Street";
$data = explode(" ", $str);

$first_name = $data[0];
$last_name = $data[1];
$age = $data[2];

$address = implode(" ", array_slice($data, 3));

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...