Avatar billede patrickpetersen Nybegynder
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"
Avatar billede patrickpetersen Nybegynder
29. maj 2013 - 18:56 #1
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??
Avatar billede patrickpetersen Nybegynder
05. juni 2013 - 16:05 #2
Jeg skulle skifte et komma ud med semikolon, så virkede den :p
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester