我必须使用php代码从文本文件导入数据到mysql的任务,是的,这听起来很简单,我之前已经这样做过,比如从csv文件导入数据,从excel文件或任何文本文件,其中数据与任何分隔符分隔。但在我目前的情况下,没有任何分隔符只有两个空格和字段的固定长度。例如 -
table field
|------|-----------|-----------|-------------|
| id(8)| name(50) | state(15) | category(10)|
|------|-----------|-----------|-------------|
| | | | |
upload.txt文件的示例数据 -
::格式:
ID NAME ADDRESS CATEGORY
10719922 Union Bank of India delhi normal
10719956 State Bank of India mumbai normal
10719522 HDFC Bank gujrat high
10759924 ICICI Bank goa normal
现在你可以理解文本文件的数据格式,即字段长度+两个空格,字段长度+两个空格等等。问题是如果数据与字段大小不匹配,则再次填充空格以完成字段的长度,这就是为什么两个空格不可用作分隔符的原因。就像第一个data-id有8位数据而不是两个空格和名称长度50但数据只有19个字符所以有31个空格来完成长度50之后两个空格然后是下一个字段。所以我没有分隔符或语法(而不是长度+2空格)来识别单个字段数据。我很困惑如何使用PHP脚本将此数据导入MySQL。任何人都认为这可能发生。我需要一些想法或PHP代码来处理这种情况。谢谢
答案 0 :(得分: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 :(得分:0)
您可以使用preg_split()
函数,并按>= 2 spaces
分解字符串/行/行:
$line = '10719922 Union Bank of India delhi normal';
$m = preg_split('~(\h{2,})~', $line);
print_r($m);