比较PHP中的2个csv文件和更好的结果

时间:2013-08-06 06:08:03

标签: php csv compare

我在这里找到了一个非常好的PHP解决方案来比较2个CSV文件。 唯一的问题是结果页面..

的index.php F1 = re1.csv&安培; F2 = re2.csv

<?php

//---- init
$strFileName1=isset($_REQUEST['f1'])?$_REQUEST['f1']:'';
$strFileName2=isset($_REQUEST['f2'])?$_REQUEST['f2']:'';

if ( !$strFileName1 ) { die("I need the first file (f1)"); }
if ( !$strFileName2 ) { die("I need the second file (f2)"); }

try {
    $arrFile1 = parseData($strFileName1);
    $arrFile2 = parseData($strFileName2);
} catch (Exception $e) {
    die($e->getMessage());
}

$rowCount1=count($arrFile1);
$rowCount2=count($arrFile2);

$colCount1=count($arrFile1[0]);
$colCount2=count($arrFile2[0]);

$highestRowCount = $rowCount1>$rowCount2 ? $rowCount1:$rowCount2;
$highestColCount = $colCount1>$colCount2 ? $colCount1:$colCount2;

$row = 0;
$err = 0;

//---- code

echo "<h2>Vergleich $strFileName1 and $strFileName2</h2>";
echo "\n<table border=1>";
echo "\n<tr><th>Err<th>Tabelle<th>Row#<th>Col#<th>Data in $strFileName1<th>Data in $strFileName2";
while($row<$highestRowCount) {
    if(!isset($arrFile1[$row])) {
        echo "\n<tr><td>Row missing in $strFileName1<th>$row";
        $err++;
    } elseif(!isset($arrFile1[$row])) {
        echo "\n<tr><td>Row missing in $strFileName2<th>$row";
        $err++;
    } else {
        $col=0;
        while($col<$highestColCount) {
            if ( !isset($arrFile1[$row][$col]) ) {
                echo "\n<tr><td>Data missing in $strFileName1<td>$row<td>$col<td><td>".htmlentities($arrFile2[$row][$col]);
                $err++;
            } elseif ( !isset($arrFile2[$row][$col]) ) {
                echo "\n<tr><td>Data missing in $strFileName1<td>$row<td>$col<td>".htmlentities($arrFile1[$row][$col]) ."<td>";
                $err++;
            } elseif ( $arrFile1[$row][$col] != $arrFile2[$row][$col] ) {
                echo "\n<tr><td>Data mismatch";
                echo "<td>Tabelle <td>$row <td>$col";
                echo "<td>".htmlentities($arrFile1[$row][$col]);
                echo "<td>".htmlentities($arrFile2[$row][$col]);
                $err++;
            }
            $col++;
        }
    }
    $row++;
}
echo "</table>";

if ( !$err ) {
    echo "<br/>\n<br/>\nThe two csv data files seem identical<br/>\n";
} else {
    echo "<br/>\n<br/>\nThere are $err differences";
}


//---- functions

function parseData($strFilename) {
    $arrParsed = array();
    $handle = fopen($strFilename , "r");
    if ($handle) {
        while (!feof($handle)) {
            $data = fgetcsv($handle , 0 , ',' , '"' );
            if ( empty($data)) continue; //empty row
            $arrParsed[]=$data;
        }
        fclose($handle);
    } else {
        throw new Exception("File read error at $strFilename");
    }
    return $arrParsed;
}

?>

结果显示文件的Row#和Col#.. 但我需要的是Col的名字..

这就是我的CSV的样子:

ISO_COUNTRY_CODE,CNT_POSTAL_CODE,ORDER1_ADMIN_TYP_1112,ORDER2_ADMIN_TYP_1113,ORDER8_ADMIN_TYP_1119,BUILTUP_ID
AND,7,0,0,7,40
ARG,1970,25,0,514,4076
AUS,2612,9,0,10978,4597
AUT,2213,9,95,2354,10304
BEL,1148,3,11,589,3781
BGR,4507,28,0,264,5375

我想看看哪个“ISO_COUNTRY_CODE”是CNT_POSTAL_CODE错误..

$ rowname = $ row; //这里我想看看桌子的RAW  “喜欢AND或ARG等”

$ colname = $ col; //在这里,我希望看到桌子的COL “就像CNT_POSTAL_CODE 或ORDER1_ADMIN_TYP_1112等“

0 个答案:

没有答案