Я должен выполнить задачу импорта данных в MySQL из текстового файла с использованием php-кода, да, это звучит так просто, и я уже сделал это, прежде чем импортировать данные из файла CSV, из файла Excel или любого текстового файла, где данные разделены с любым разделителем. Но в моем текущем случае нет никакого разделителя, только два пробела и фиксированная длина поля. Например-
table field
|------|-----------|-----------|-------------|
| id(8)| name(50) | state(15) | category(10)|
|------|-----------|-----------|-------------|
| | | | |
пример данных файла upload.txt-
::формат::
ID ИМЯ АДРЕС КАТЕГОРИИ
10719922 Union Bank of India delhi normal
10719956 State Bank of India mumbai normal
10719522 HDFC Bank gujrat high
10759924 ICICI Bank goa normal
Теперь вы можете понять формат данных текстового файла, то есть длину поля + два пробела, длину поля + два пробела и так далее. Проблема заключается в том, что если данные не совпадают с размером поля, то снова для заполнения длины поля снова используются пробелы, поэтому два пробела недоступны в качестве разделителя. Например, взять первый из данных. Идентификатор данных содержит 8 цифр, а не два пробела, а длина имени 50, но данные имеют только 19 символов, поэтому для заполнения длины 50 после этих двух пробелов и следующего поля есть 31 пробел. Поэтому у меня нет разделителя или синтаксиса (вместо длины + 2 пробела) для идентификации данных одного поля. Я очень запутался, как импортировать эти данные в MySQL, используя скрипт php. Кто-нибудь думает, что это может случиться? Пожалуйста, мне нужна идея или PHP-код, чтобы справиться с этой ситуацией. Благодарю вас
Это не должно быть сложнее, чем это:
<?php
$input = <<<END
10719922 Union Bank of India delhi normal
10719956 State Bank of India mumbai normal
10719522 HDFC Bank gujrat high
10759924 ICICI Bank goa normal
END;
$def = array(
"id" => 8,
"name" => 50,
"state" => 15,
"category" => 10
);
foreach (explode(PHP_EOL, $input) as $line) {
foreach ($def as $field => $length) {
$value = substr($line, 0, $length + 2);
$line = substr($line, $length + 2);
print $field.' = '.trim($value).PHP_EOL;
}
print '----------------------------------------'.PHP_EOL;
}
?>
Основная идея заключается в создании определения формата в $def
хэш, а затем обработать все строки в соответствии с этим определением формата.
Выполнение этого кода приведет к выводу ниже. Измените фактическую реализацию в соответствии с вашими потребностями.
id = 10719922
name = Union Bank of India
state = delhi
category = normal
----------------------------------------
id = 10719956
name = State Bank of India
state = mumbai
category = normal
----------------------------------------
id = 10719522
name = HDFC Bank
state = gujrat
category = high
----------------------------------------
id = 10759924
name = ICICI Bank
state = goa
category = normal
----------------------------------------
Вы могли бы использовать preg_split()
функция, и взорвать строку / строку / строку >= 2 spaces
:
$line = '10719922 Union Bank of India delhi normal';
$m = preg_split('~(\h{2,})~', $line);
print_r($m);