Avatar billede gil-galad Nybegynder
02. februar 2011 - 00:17 Der er 6 kommentarer og
1 løsning

Importere dataindhold fra fil til

Hej

Jeg har en datafil der ser således ud:

Dive Time,      m,    °C, O2%

    0:00,  0.00,  9.2,  21,
    0:04,  1.34,  9.2,  21,
    0:08,  1.14,  9.2,  21,
    0:12,  1.64,  9.2,  21,
    0:16,  2.10,  9.2,  21,
    0:20,  2.54,  9.2,  21,

og så videre...

Jeg vil gerne importere denne ind i mit php-script, og få indholdet i søjlerne som arrays, således jeg i alt får fire arrays indeholdende lige mange datapunkter.

På forhånd tak!
Avatar billede showsource Seniormester
02. februar 2011 - 10:37 #1
Du kan bruge file() til at lave et array.
Derefter en forløkke til at loope hver linie i filen igennem.
I forløkken bruges først trim() af hver linie for at fjerne space/liniskift.
Dernæst explode() til at lave et array, som du derefter kan putte i dit nye array.
Avatar billede gil-galad Nybegynder
02. februar 2011 - 14:24 #2
Tak for svaret!


Jeg er ikke super hård til dette. Kan du måske komme med et groft eksempel som jeg kan arbejde videre med?
Avatar billede olsensweb.dk Ekspert
02. februar 2011 - 14:38 #3
under forudsætning du har linje skift efter data 4 (21)

<?php
$filename = "test.csv";
$file = fopen($filename, 'r');
$CsvString = fread($file, filesize($filename));
fclose($file);
$Data = str_getcsv($CsvString, "\n"); //parse the rows
$Dive = array();
$m = array();
$C = array();
$O2 = array();
$lng = count($Data);
// $i = 0 => overskrifter
for($i=1; $i<$lng; $i++){
    $row = $Data[$i];
    $pieces = explode(",", $row);
    $Dive[] = $pieces[0];
    $m[] = $pieces[1];
    $C[] = $pieces[2];
    $O2[] = $pieces[3];   
}
print_r($Dive);
print_r($m);
print_r($C);
print_r($O2);
?>


http://php.net/manual/en/function.fgetcsv.php Example #1
http://www.php.net/manual/en/function.str-getcsv.php
http://www.php.net/manual/en/function.explode.php
Avatar billede showsource Seniormester
02. februar 2011 - 15:02 #4
Næsten det samme:

<?php

$fil = file("fil.txt");

// definerer et array på forhånd, med 4 "keys" som hver er endnu et array
$new_ar = array("Tidspunkt" => array(), "Minutter" => array(), "Temp" => array(), "co2" => array());

// $i == 1 fordi den første linie ikke indeholder relevant info ?
for($i = 1; $i < count($fil); $i++) {

$line = trim($fil[$i]);

    if(empty($line)) {
    continue;
    }

// Del linie op for hvert komma
$vars = explode(",", $line);

    if(count($vars) >= 4) {
    $new_ar["Tidspunkt"][] = trim($vars[0]);
    $new_ar["Minutter"][] = trim($vars[1]);
    $new_ar["Temp"][] = trim($vars[2]);
    $new_ar["co2"][] = trim($vars[3]);
    }

}

echo"<pre>";

print_r($new_ar);

echo"</pre>";

?>
Avatar billede gil-galad Nybegynder
03. februar 2011 - 23:29 #5
Lækkert. Tak skal i have.

Smider i et svar?
Avatar billede olsensweb.dk Ekspert
04. februar 2011 - 12:33 #6
du får mit her. men indrømmet det var showsource, der bidrog mest.
showsource løsning tager også hensyn til dine tomme linje mellem overskrifter og data, samt trimmer data for mellemrum før/efter data
Avatar billede gil-galad Nybegynder
08. februar 2011 - 01:06 #7
Så får du alle point, idet showsource ikke kom med et svar.


Tak for hjælpen begge to.
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

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