28. maj 2013 - 16:16
Der er
1 kommentar og
1 løsning
Find dubletter i en CSV fil og lav en "betinget" sletning
Hejsa Eksperten.
Jeg har en CSV-fil hvis struktur ser således ud:
adr, status, projekt
Gadevej 2, Mulig, Et-eller-andet
Vejgade 4, Klar, to-eller-andet
Gadevej 2, ukendt, ukendt
Jeg har prøvet med makro, men det går helt galt, min pc crasher efter 3-5 timer og så kan jeg starte forfra :(
Jeg ønsker, at "Gadevej 2, ukendt, ukendt" skal slettes, fordi en status der er "mulig" er bedre end "ukendt".
Jeg har omkring 300.000 rækker, og jeg tror der er max 20.000 dubletter, som så skal ende ud i de max 10.000 unikke.
- Jeg har prøvet nogle ting af, men det jeg selv kan finde frem til er noget der blot sletter dubletterne - Det er vigtigt, at jeg kan slette på "betingelsen"
jeg er her:
<?
$fp = fopen('input.csv', 'r');
$data = array();
$head = fgetcsv($fp, 1024); // header line
while ($line = fgetcsv($fp, 1024)) {
$data[$line[0]][] = $line;
}
fclose($fp);
//
// write to file
//
$fp = fopen('output.csv', 'w');
fputcsv($fp, $head);
foreach ($data as $adr=>$adrdata) {
// use a custom sort to sort by ranking
usort($adrdata, 'sortrank');
// we only want the one with the highest ranking
$line = array_shift($adrdata);
fputcsv($fp, $line);
}
fclose($fp);
function sortrank($a, $b)
{
$rank = array (
'Fiber klar' => 1,
'Fiber mulig' => 2,
'BBU - Fiber mulig' => 3,
'Tomrør klar' => 4,
'BBU - Tomrør klar' => 5,
'Etablering' => 6,
'Venter på tidsplan' => 7,
'Forhåndsundersøgelse' => 8,
'Fiber ikke muligt/projekt udsat' => 9,
'Fiber ikke relevant' => 10,
'Ukendt' => 11,
'BBU - Ukendt' => 12
);
return $rank[trim($a[1])] - $rank[trim($b[1])];
}
?>
Men den sletter ikke rækkerne, den smider bare en ny identisk fil ud.. jeg har sat CHMod 777, hvad kan problemet være??