Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查找文件delimeter或regex_Php_Mysql_Regex_Csv_Delimiter - Fatal编程技术网

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