Как разбить файл через пробел? - PullRequest
3 голосов
/ 15 июня 2010

Я пытаюсь импортировать это:

http://en.wikipedia.org/wiki/List_of_countries_by_continent_%28data_file%29

в следующем формате:

AS AF AFG 004 Afghanistan, Islamic Republic of
EU AX ALA 248 Åland Islands
EU AL ALB 008 Albania, Republic of
AF DZ DZA 012 Algeria, People's Democratic Republic of
OC AS ASM 016 American Samoa
EU AD AND 020 Andorra, Principality of
AF AO AGO 024 Angola, Republic of
NA AI AIA 660 Anguilla

, если я делаю

<? explode(" ",$data"); ?>

, который отлично работает, за исключением стран с более чем одним словом.

как я могу разделить его, чтобы я получил первые 4 бита данных (символы / целые числа) и 5-й бит данных, оставшиеся?

это в php

спасибо

Ответы [ 4 ]

11 голосов
/ 15 июня 2010

Функция explode принимает необязательный параметр ограничения. Измените свой вызов функции на:

<?php explode(" ", $data, 5); ?>

и вы получите название страны в качестве последнего элемента в массиве, содержащем пробелы.

3 голосов
/ 15 июня 2010

Используя распаковать :

$format = "A2cont/x/A2alpha2/x/A3alpha3/x/A3num/x/a*eng";
$line = "AS AF AFG 004 Afghanistan, Islamic Republic of";
$ar = unpack($format, $line);

Производит:

array (
  'cont' => 'AS',
  'alpha2' => 'AF',
  'alpha3' => 'AFG',
  'num' => '004',
  'eng' => 'Afghanistan, Islamic Republic of',
)

Преимущество заключается в создании ассоциативного массива (обратите внимание на текст перед косой чертой) и предупреждении, если ввод неверен.

0 голосов
/ 15 июня 2010

Может быть sscanf также может делать то, что вам нужно:

<?php
// in my example I loaded the data in an array line by line
$lines = file('sscanf_data.txt');

foreach($lines as $line) {
    $data = array();
    // define the format of the input string, assign the 
    // extracted data to an associative array
    sscanf($line, "%s %s %s %s %[^.]", 
        $data['col_1'], 
        $data['col_2'], 
        $data['col_3'], 
        $data['col_4'], 
        $data['col_5']);

    // dump array contents
    print_r($data);
}

Вывод:

Array
(
    [col_1] => AS
    [col_2] => AF
    [col_3] => AFG
    [col_4] => 004
    [col_5] => Afghanistan, Islamic Republic of

)
...

Хорошо, что если вы храните данные вВ ассоциативном массиве у вас уже есть пары полей-значений для вставки их в БД.

0 голосов
/ 15 июня 2010

Вы можете использовать preg_match, и ваш текст будет в $match[5];

<?php
$str = 'AS AF AFG 004 Afghanistan, Islamic Republic of';
$chars = preg_match('/([A-Z]*)\ ([A-Z]*)\ ([A-Z]*)\ ([0-9]*)\ (.*)\ /', $str, $match);
print_r($match);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...