Avatar billede nbj1 Praktikant
23. juni 2009 - 10:32 Der er 17 kommentarer og
1 løsning

udtage bestemte felter fra en csv fil

Det jeg gerne vil vide noget om er, hvis man har en csv fil med ex. 40 felter og kun skal bruge 4 udaf de 40 kan man lave noget kode "dos" "php" eller andet, der kan fjerne de felter.
kan naturlighvis bruge excel eller notepad til at redigere i filen, men en måde at auto fjerne overflødige felter ?
Avatar billede mrgumble Nybegynder
23. juni 2009 - 12:40 #1
Det kommer da an på, hvad du ellers bruger din csv-fil til. Er det ikke en mulighed at filtrere når du importere csv-filen til den videre anvendelse?

Ellers ville jeg bruge Python. Der skal ikke meget kodning til, og vupti, så har du et script der tager imod din csv-fil, stripper for uønskede felter og skriver en ny fil (eller overskriver den gamle). Når scriptet er skrevet kan det klares med en prompt som:
python bulky.csv stripped.csv

Hvis du har php til rådighed, kunne du jo lave en fin lille ordning, hvor du uploader csv-filen og serveren svarer igen ved at lade dig downloade den strippede csv-fil.
Avatar billede nbj1 Praktikant
23. juni 2009 - 13:06 #2
Mit problem er fra min mobil laver jeg en csv fil, men den tager alle felter med, ca 56 felter, den fil importere jeg så til bibob pc sms men der kan kun importeres 4 felter, jeg kan godt redigere manuelt hvis det kun er et par tlf men hvis der er mange, er det temmeligt omstændigt.

jo bruger lidt php og mysql på min server, PYTHON kender jeg ikke noget til.
Avatar billede mrgumble Nybegynder
23. juni 2009 - 13:43 #3
Hvad sker der med Bibob pc sms, når du stikker den csv-fil med 56 felter?

Hvis du ikke har Python gider vi ikke gå ind i det. I stedet kan du sagtens anvende php; så har du servicen til rådighed bare du er på nettet.

Du får det som en hjemme-opgave. Du må selv kode, for det er sjovest. Jeg giver nogle hints, så du skal måske skrive tingene lidt om.

1. Lav en html-side med en fil-upload form.
(hint: http://www.w3schools.com/PHP/php_file_upload.asp)

2. Tilpas modtage scriptet så den tager imod csv-filen.
(hint: http://us3.php.net/manual/en/features.file-upload.php)

3. Læs csv-filen med php funktionen "fgetcsv".
(hint: http://us3.php.net/manual/en/function.fgetcsv.php)

4. Løb igennem rækkerne, og udvælg kun de felter du skal bruge.

5. Output til brugeren, evt. som download fil.
(hint: se eksempel 1 i http://dk.php.net/manual/en/function.header.php)
Avatar billede nbj1 Praktikant
23. juni 2009 - 13:52 #4
bibob kommer bare og siger der for mange felter og kan ikke importeres, men hvis jeg i notepad sletter alle overflødige felter så der kun er fornavn, efternavn, nummer, gruppe så kan det importeres.
jeg kikkede lige på python uh nej not programerings sprog igen hehe ok jeg kikker på dine link takker for nu...
Avatar billede nbj1 Praktikant
23. juni 2009 - 15:48 #5
kan du sige hvad file ???? navnet skal være

if ((($_FILES["file"]["type"] == "????/csv"))

har prøvet uden validering så hentes filen, før stod der :

if ((($_FILES["file"]["type"] == "image/gif"))
kan jeg jo ikke bruge....

har prøvet at give ???? navnet på filen, det virker ikke
Avatar billede mrgumble Nybegynder
23. juni 2009 - 16:16 #6
Det er garantrisse bare "text/csv".
Ellers prøv som andet linie at skrive:
echo "<pre>";
print_r($_FILES);
echo "</pre>";

Så får du alle informationerne i arrayet. De to echo-kald er hvis du outputter til HTML; så sørger <pre>-taggene for at du kan se strukturen. ;)
Avatar billede nbj1 Praktikant
23. juni 2009 - 16:36 #7
nej dette kan se nu, det er
[type] => application/vnd.ms-excel
det virkede.
okay så langt så godt men nu kommer det svære læse filen og kun udvælge de felter der skal bruges samt give mulighed for at download filen igen.....
Avatar billede nbj1 Praktikant
23. juni 2009 - 18:52 #8
det jeg kan er at få den til at liste csv filen men at tage bestemte felter ud kan jeg bare ikke se mig udaf kan du give lidt hjælp i det

<?php
$row = 1;
$handle = fopen("test.csv", "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $num = count($data);
    echo "<p> $num fields in line $row: <br /></p>\n";
    $row++;
    for ($c=0; $c < $num; $c++) {
        echo $data[$c] . "<br />\n";
    }
}
fclose($handle);
?>
Avatar billede mrgumble Nybegynder
23. juni 2009 - 18:54 #9
Næ... Hvis du kigger i hint #3 tror jeg du hurtigt finder ud af det.
Husk at print_r($var) er rigtig god hvis du vil se en array.
Avatar billede nbj1 Praktikant
23. juni 2009 - 18:59 #10
ja har snart stired mig blind på de ex der i nogle timer hehe
Avatar billede mrgumble Nybegynder
23. juni 2009 - 19:01 #11
$data i eksemplet er en array. Hvis nu du har følgende indhold i csv-filen:
"Fornavn";"Efternavn";"Adresse"
"Karl";"Carlsberg";"Viby"

Vil $data være for linie 2:
$data[0] = "Karl";
$data[1] = "Carlsberg";
$data[2] = "Viby";

Så hvis dine interessante data ligger i det 1., 2., 5. og 10. felt, kan du samle dit output i:
$output = Array($data[0], $data[1], $data[4], $data[9]);
echo '"'.implode('";"', $output).'"'
Avatar billede mrgumble Nybegynder
23. juni 2009 - 19:02 #12
Ja, og mit forrige svar (kl. 18:54) var til din kommentar kl.  16:36... :op
Avatar billede nbj1 Praktikant
24. juni 2009 - 09:46 #13
jeg har testet csv med dette :

<?php

  $handle = fopen("upload/tlfnr.csv", "r");
  $out = fopen("upload/tlfnt_new.csv", "w");
  $n = 0;
  while (($data = fgetcsv($handle, 1000, ",")) != FALSE)
  {
    $n++;
    $data[2] += 50;
    $tmp = implode( ',', $data );
    fwrite( $out, "$tmp\n" );
  }
  fclose($handle);
  fclose( $out );

?>

for at se hvad sker der egenligt før og efter, det viser sig
før når jeg åbner filen i excel står tekst fint, men efter
kørsel af ovenstående script hvor jeg kun laver en ny fil og tilføjer 50 til felt2 sker der noget underligt der kommer en masse underligt tekst A der står på hovedet og kina tekst,
kan du fortælle mig hvorfor ?
Avatar billede mrgumble Nybegynder
24. juni 2009 - 09:57 #14
I stedet for implode og fwrite kan du anvende fputcsv.
$n++ anvender du heller ikke nogen steder.
Har du prøvet at kigge på, om den læser CSV-filen rigtigt i første omgang?
Avatar billede nbj1 Praktikant
24. juni 2009 - 10:10 #15
ja det script jeg har testet fra #8 læser fint teksten
her så fundet dette
setlocale( LC_ALL, "da", "da_DK", "dan", "danish", "da_DK.ISO88591" );
kan være jeg skal have dette med
men hvordan sletter jeg felter eller kolonner ?
Avatar billede mrgumble Nybegynder
24. juni 2009 - 10:26 #16
I stedet for at slette felter/kolonner, kan du jo nøjes med at kopiere udvalgte felter over i et nyt array, som du så gemmer.
Avatar billede al_dair Nybegynder
29. september 2009 - 23:55 #17
til en anden go' gang, prøv http://queryfy.smallmeans.com
Avatar billede nbj1 Praktikant
06. marts 2010 - 08:27 #18
luk
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
Kurser inden for grundlæggende programmering

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