本帖最后由 lazygc520 于 2010-04-08 11:09:46 编辑

解决方案 »

  1.   


    $arr1 = "FAB3     0  31  14   0   946   144     0    23      QC       65         P  11      1     4-32640    -458.0MV    0.00A    0.00A    3.2MA    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A                         -502C                -502.0MM                   0.00M                   0.00M                   0.00M               0.00M             226.6MM             726.6MM               0.00M   2  0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";
    $arr2 = "FAB3     0  17  11   0   946   144     0    23      QC       65         P  15      1-13613-11437    -458.0MV    0.00A    0.00A    3.6MA    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A                         -502C                -502.0MM                   0.00M                   0.00M                   0.00M               0.00M             273.4MM             773.4MM               0.00M   2  0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";
    $arr = $arr1 . ' ' . $arr2;
    $result = preg_split("/[\s,]+/",$arr);
    print_r($result);
      

  2.   

    楼上的,这个方法好像不对吧。我是想把$arr1中的”1     4-32640“这两项变成一项来处理。
      

  3.   

    这不大可能,因为你的日志文件使用了同样的分隔符。
    不过你可以这样$arr1 = "FAB3     0  31  14   0   946   144     0    23      QC       65         P  11      1     4-32640    -458.0MV    0.00A    0.00A    3.2MA    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A                         -502C                -502.0MM                   0.00M                   0.00M                   0.00M               0.00M             226.6MM             726.6MM               0.00M   2  0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";
    $arr2 = "FAB3     0  17  11   0   946   144     0    23      QC       65         P  15      1-13613-11437    -458.0MV    0.00A    0.00A    3.6MA    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A                         -502C                -502.0MM                   0.00M                   0.00M                   0.00M               0.00M             273.4MM             773.4MM               0.00M   2  0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";
    $result1 = preg_split("/[\s,]+/",$arr1);
    $result2 = preg_split("/[\s,]+/",$arr2);foo($result1);
    foo($result2);print_r($result1);
    print_r($result2);function foo(&$ar) {
      if(count($ar) == 41) return;
      $fmt = '%-' . (13 - strlen($ar[14])) . 's%s';
      $ar[13] = sprintf($fmt, $ar[13], $ar[14]);
      unset($ar[14]);
      $ar = array_slice($ar, 0);

      

  4.   

    <?php
    $arr1 = "FAB3     0  31  14   0   946   144     0    23      QC       65         P  11      1     4-32640    -458.0MV    0.00A    0.00A    3.2MA    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A                         -502C                -502.0MM                   0.00M                   0.00M                   0.00M               0.00M             226.6MM             726.6MM               0.00M   2  0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";
    $arr2 = "FAB3     0  17  11   0   946   144     0    23      QC       65         P  15      1-13613-11437    -458.0MV    0.00A    0.00A    3.6MA    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A                         -502C                -502.0MM                   0.00M                   0.00M                   0.00M               0.00M             273.4MM             773.4MM               0.00M   2  0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";
    //$arr = $arr1 . ' ' . $arr2;
    $arr = array();
    //$result = preg_split("/[\s,]+/",$arr);
    //print_r($result);
    $arr1 = preg_split("/[\s,]+/",$arr1);
    for($i=0; $i<count($arr1); $i++) {

    if($arr1[$i] == '1' && $arr1[$i+1] == '4-32640')
    $arr[count($arr)] = $arr1[$i].$arr1[$i+1];
    else {

    $arr[count($arr)] = $arr1[$i];
    if($arr[$i] == '4-32640')
    unset($arr[$i]);
    }

    }
    print_r($arr);
    //$result1 = preg_split("/[\s,]+/",$arr1);
    //$result2 = preg_split("/[\s,]+/",$arr2);
    //print_r($result1);
    //print_r($result2);
    ?>
      

  5.   

    $arr1 = "FAB3     0  31  14   0   946   144     0    23      QC       65         P  11      1     4-32640    -458.0MV    0.00A    0.00A    3.2MA    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A                         -502C                -502.0MM                   0.00M                   0.00M                   0.00M               0.00M             226.6MM             726.6MM               0.00M   2  0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";
    $arr2 = "FAB3     0  17  11   0   946   144     0    23      QC       65         P  15      1-13613-11437    -458.0MV    0.00A    0.00A    3.6MA    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A    0.00A                         -502C                -502.0MM                   0.00M                   0.00M                   0.00M               0.00M             273.4MM             773.4MM               0.00M   2  0------0--00--------000----------------------0000--0000000--0------0------------00-000000000---------00-----000--0";问题是出在这两块红色的地方,如果这项数据的值是稳定的,几种值中间选定,把8楼的代码改改就能用了,
    如果位置是稳定的,可以保证是13列出问题,请参考6楼的。
    如果非要和并,请楼主最好能提供 这两块位置字段的明显的变化规则来。
    如果确定为 \d\s*\d+\-\d+ (1     4-32640) 和 \d+\-\d+\-\d+ (1-13613-11437[)
    这两种情况的化,可以用正则环视(又叫预判)来解决。
    总之想要匹配什么,总要能先把同与不同找出来。 不能光说,我又想按空格来区分,又想不按空间来区分这样的问题,是没有明细化的,我就不知道怎么下手了。