【问题标题】:Merge columns from two text character-seperated text files [closed]合并两个文本字符分隔的文本文件中的列[关闭]
【发布时间】:2016-03-30 13:06:02
【问题描述】:

例如,我有 2 个文件

file1.txtfile2.txt,每行包含两列,由 : 字符分隔。

file1.txt 包含例如以下内容:(我想使用第一个“列”)

a:b
markus:lanz
peter:heinrichs
lach:schnell

file2.txt 包含例如以下内容(我想使用第二个“列”)

b:c
lanz:hallo
heinrichs:gruss
schnell:langsam

所以我正在寻找以下输出:

a:c
markus:hallo
peter:gruss
lach:langsam

这怎么可能?

我当前的代码如下:

<?php
    $file1 = 'a:b
    markus:lanz
    peter:heinrichs
    lach:schnell';

    $file2 = '
    lanz:hallo
    heinrichs:gruss
    b:c
    test:notest
    schnell:langsam';

    $array = explode(":", $file1);
    for($i=0; $i < count($array); $i++) {
        $array = explode(":", $file1);
        $pattan = $array[$i];
        $pattern = '=\n'. $pattan .':(.*)\n=sUm';
        $result = preg_match($pattern, $file2, $subpattern);

        echo "<br>";
        echo $array[$i];
        $first = $array[$i];
        echo "<br>";
    }

    $pattern = '=\n'. $first .':(.*)\n=sUm';
    $result = preg_match($pattern, $file2, $subpattern);
    var_dump($subpattern);
?>

【问题讨论】:

  • 从写一些代码开始。没有人会为你做这件事。
  • 展示您的尝试,然后我们可以帮助您。

标签: php explode


【解决方案1】:

使用preg_splitarray_map 函数的解决方案:

$file1_content = "a:b
markus:lanz
peter:heinrichs
lach:schnell";

$file2_content = "b:c
lanz:hallo
heinrichs:gruss
schnell:langsam";

// \R modifier matches line break among all platforms (\r\n|\n|\r)
$file1_parts = preg_split('/\R/', $file1_content);
$file2_parts = preg_split('/\R/', $file2_content);

$cross_result = array_map(function($fp1, $fp2){
    return explode(":", $fp1)[0] .":". explode(":", $fp2)[1] . PHP_EOL;
}, $file1_parts, $file2_parts);

$cross_result = implode("", $cross_result);

print_r($cross_result);

输出:

a:c
markus:hallo
peter:gruss
lach:langsam

【讨论】:

  • 非常感谢先生。如果我想从 a:b:c:d:e:f:g:h:i
  • 欢迎您,您能解释一下“从 a:b:c:d:e:f:g:h:i 执行此操作”是什么意思吗?
  • 如果我对文件 1 和文件 2 的顺序不同,那我该怎么办?
  • 在你的情况下,顺序应该是严格的,否则你会收到不相关的对,比如a:hallopeter:lansgram
【解决方案2】:
$file1 = 'a:b
markus:lanz
peter:heinrichs
lach:schnell';
$array1 = explode("\n", $file1);

$file2 = 'b:c
lanz:hallo
heinrichs:gruss
schnell:langsam';
$array2 = explode("\n", $file2);

$array3 = array();

foreach($array1 as $i => $value) {
    $key = explode(':',$value)[0];
    $val = explode(':',$array2[$i])[1];
    $array3[] = $key.':'.$val;
}

$file3 = implode("\n",$array3);

【讨论】:

  • 如果我对 $file1 和 $file2 f.e 有不同的订单。比如:$file1 = 'markus:lanz a:b peter:heinrichs lach:schnell'; $array1 = explode("\n", $file1); $file2 = 'b:c lanz:你好 heinrichs:gruss schnell:langsam'; $array2 = explode("\n", $file2);
【解决方案3】:

我的想法/我的代码就是这样的

不工作

但在某些人讨厌或类似的事情之前:

<?php
$file1 = 'a:b
markus:lanz
peter:heinrichs
lach:schnell';

$file2 = '
lanz:hallo
heinrichs:gruss
b:c
test:notest
schnell:langsam';





  $array = explode(":", $file1);


  for($i=0; $i < count($array); $i++) {



$pattern = "/^.*\b". $array[$i] ."\b.*$/m";
$matches = array();
preg_match($pattern, $file2, $matches);

var_dump($matches);

   echo $array[$i] . ":";
  }

?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2011-06-07
    相关资源
    最近更新 更多