Php 查找文件delimeter或regex
我每天都会收到一份包含一些数据的文件:Php 查找文件delimeter或regex,php,mysql,regex,csv,delimiter,Php,Mysql,Regex,Csv,Delimiter,我每天都会收到一份包含一些数据的文件: B024560HERR S, KARL-HEINZ FAO031 D F 18.07.17 01.08.17 14 LH 1162 18.07.17 10:30 12:35 FRA FAO FRA 1 LH 1163 01.08.17 FAO 03.01.17 1 Frühbucher 10% inkl. Reiseleitung
B024560HERR S, KARL-HEINZ FAO031 D F 18.07.17 01.08.17 14 LH 1162 18.07.17 10:30 12:35 FRA FAO FRA 1 LH 1163 01.08.17 FAO 03.01.17 1
Frühbucher 10%
inkl. Reiseleitung
und Transfer ab/bis Flughafen
*REPEATER, BITTE ZIMMERGEGENÜBER DER BAR 3ER
UNVERBINDLICHER KUNDENWUNSCH
B024560HERR S, KARL-HEINZ FAO031 D F 18.07.17 01.08.17 14 LH 1162 18.07.17 10:30 12:35 FRA FAO FRA 1 LH 1163 01.08.17 FAO 03.01.17 1
B024560FRAU S, MARIA FAO031 D F 18.07.17 01.08.17 14 LH 1162 18.07.17 10:30 12:35 FRA FAO FRA 1 LH 1163 01.08.17 FAO 03.01.17 2
链接到此示例文件:
我需要将其导入mysql数据库
所以应该这样划分(使用|作为分隔符):
我做得最好的是:
所以我的问题是我怎样才能找到文件删除表?或者有没有其他更好的方法?
想法是用php读取此文件并导入mysql数据库。这将实现您想要的功能:
(?<=\w)\h{2,}(?=\w) # horizontal spaces with word character beneath
|
(?=HERR|FRAU) # "HERR" or "FRAU" literally
|
\h+(?=\d{2}\.\d{2}\.\d{2}) # a date
|
\h+(?=\d{2}:\d{2}) # time of date in xx:xx format
(?
看看吧。有点简单
使用(?m)^(B\d+)(?:(?![]{9})+)[]+(.+)
和回调函数
将$1、$2、$3传递给回调
使用\s+拆分$3。$result=使用|连接拆分数组。Return=Join$1 |$2 |+$result
(?m)
^
( B \d+ ) # (1)
( # (2 start)
(?:
(?! [ ]{9} )
.
)+
) # (2 end)
[ ]+
( .+ ) # (3)
匹配示例输出
** Grp 1 - ( pos 0 , len 7 )
B024560
** Grp 2 - ( pos 7 , len 18 )
HERR S, KARL-HEINZ
** Grp 3 - ( pos 35 , len 148 )
FAO031 D F 18.07.17 01.08.17 14 LH 1162 18.07.17 10:30 12:35 FRA FAO FRA 1 LH 1163 01.08.17 FAO 03.01.17 1
你不能用
php
或java
读取文件,并向数据库发出insert
查询吗?对不起,我不理解你的建议。php怎么会“知道”呢哪一个是delimeter文件?我会将多个空格截断为单个空格,然后将每行按空格分割。这在php中比在MySQL中容易得多。可能是示例文件在dropbox中以某种方式进行了更改-您能在十六进制编辑器中检查文件副本,看看元素之间是否有类似0x1D的字符吗您需要返回导出此损坏数据的任何人/任何人并将其修复。您确定没有任何不可见字符(例如\x1f
)用作字段分隔符吗?您好,感谢您的回复!我已使用php语言并更正了输出:| LH 1163 01.08.17 |->LH 1163 | 01.08.17|
<?php
$text = <<<EOT
B024560HERR S, KARL-HEINZ FAO031 D F 18.07.17 01.08.17 14 LH 1162 18.07.17 10:30 12:35 FRA FAO FRA 1 LH 1163 01.08.17 FAO 03.01.17 1
Frühbucher 10%
inkl. Reiseleitung
und Transfer ab/bis Flughafen
*REPEATER, BITTE ZIMMERGEGENÜBER DER BAR 3ER
UNVERBINDLICHER KUNDENWUNSCH
B024560HERR S, KARL-HEINZ FAO031 D F 18.07.17 01.08.17 14 LH 1162 18.07.17 10:30 12:35 FRA FAO FRA 1 LH 1163 01.08.17 FAO 03.01.17 1
B024560FRAU S, MARIA FAO031 D F 18.07.17 01.08.17 14 LH 1162 18.07.17 10:30 12:35 FRA FAO FRA 1 LH 1163 01.08.17 FAO 03.01.17 2
EOT;
$regex = '~
(?<=\w)\h{2,}(?=\w)
|
(?=HERR|FRAU)
|
\h+(?=\d{2}\.\d{2}\.\d{2})
|
\h+(?=\d{2}:\d{2})
~x';
$lines = explode("\n", $text);
foreach ($lines as $line) {
$fields = preg_split($regex, $line);
if (count($fields) > 1) {
print_r($fields);
}
}
?>
(?m)
^
( B \d+ ) # (1)
( # (2 start)
(?:
(?! [ ]{9} )
.
)+
) # (2 end)
[ ]+
( .+ ) # (3)
** Grp 1 - ( pos 0 , len 7 )
B024560
** Grp 2 - ( pos 7 , len 18 )
HERR S, KARL-HEINZ
** Grp 3 - ( pos 35 , len 148 )
FAO031 D F 18.07.17 01.08.17 14 LH 1162 18.07.17 10:30 12:35 FRA FAO FRA 1 LH 1163 01.08.17 FAO 03.01.17 1