Как импортировать данные из текстового файла без разделителя или разделителя?

Я должен выполнить задачу импорта данных в 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-код, чтобы справиться с этой ситуацией. Благодарю вас

1

Решение

Это не должно быть сложнее, чем это:

<?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
----------------------------------------
1

Другие решения

Вы могли бы использовать preg_split() функция, и взорвать строку / строку / строку >= 2 spaces:

$line = '10719922  Union Bank of India                                 delhi            normal';
$m = preg_split('~(\h{2,})~', $line);
print_r($m);

демонстрация

0

По вопросам рекламы [email protected]