[PHP] datafile verwerken *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Greetz.. ben na lange tijd weer terug op dit koewle forum!

Ik ben bezig met het verwerken van een ascii file, die moet ingelezen worden en daarna in een database gezet worden.

Aangezien dit de eerst keer is dat ik zo'n uitgebreide datafile moet inlezen wilde ik jullie suggesties en advies vragen, over hoe ik dit het beste en efficienste kan aanpakken.

Omdat de layout nogal op z'n plaat gaat heb ik alle spaties vervangen voor enters.
De datafile is als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
108GZDSFORD
FOCUS
1.4 I TREND 5D
FO41FOCU1415FORD
FOCUS
1.4 16V  55KW 5D TREND
200109BP4014HHB52001270420010043900M000012950000000000000000000000000000E
005116Van Kalmthout & Van Niel BV   Smaragdlaan
2132VX05-15HOOFDDORP
02023-5683200
150000000000J33  JJ J005501049J
JNJNNNNNJNNNJNNNNJNNNNNNNNNNJNNJJNNNNNN
01388
E


Het Record lay-out Mediabestand:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Omschrijving    Van T/M Formaat Notatie/Bijzonderheden

X400-stuurkaart voor de RS6000
Tekst   001 005 X(005)  '@RDC:'
Alias   006 015 X(010)  RDC nummer uitgever
Omschrijving    016 040 X(024)  
    Mediacode   016 018 X(003)
    Dagomschrijving 019 020 X(002)
    Mediaomschrijving   021 040 X(019)
Datum aanmaak   041 048 9(008)  ddmmeejj
Tijd aanmaak    049 054 9(006)  hhmmss
Filler  055 304 X(250)

Voorlooprecord mediabestand
Recordcode  001 001 X(001)  '0'
Mediacode   002 004 X(003)
Mediaomschrijving   005 034 X(030)
Datum aanmaak   035 042 9(008)  ddmmeejj
Tijd aanmaak    043 048 9(006)  hhmmss
Filler  049 304 X(256)

Detailrecord mediabestand
Recordcode  001 001 X(001)  '1'
Kenteken    002 007 X(006)
Merk    007 027 X(020)
Model   028 048 X(020)
Uitvoering  049 079 X(032)
Kleur   080 081 X(002)  
00  Oranje
01  Roze
02  Rood
03  Wit
04  Blauw
05  Groen
06  Geel
07  Grijs
08  Bruin
09  Beige
10  Crème
11  Paars
12  Zwart
13  Overig



Zoals jullie kunnen zien is de data file nogal onduidelijk, hoe kan ik dit het beste doen? gewoon met een editor tellen de posities binnen de regel en dan dit ophalen met php?

Ik ga de gegevens na het verwerken in een mysql database zetten maar het gaat dus vooral om het verwerken van de datafile, mischien heeft iemand wel ideen voor handige php functies die hiervoor gebruikt kunnen worden. ~Jordan20

[ Voor 27% gewijzigd door Glimi op 18-06-2003 09:11 ]


Acties:
  • 0 Henk 'm!

  • sebas
  • Registratie: April 2000
  • Laatst online: 03-09 12:51
Je topic is nauwelijks leesbaar, en je zou naar functies zoals split(), explode() en de regice kunnen kijken.

Everyone complains of his memory, no one of his judgement.


Acties:
  • 0 Henk 'm!

  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Kijk hier eens : PHP :Regular Expression :)
Daarnaast zou je je post even kunnen aanpassen? De lay-out is op deze manier namelijk aardig vern%^kt ;)

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Ik ben de laatste tijd ook bezig met import van grote databestanden,en ik raadt je aan toch gewoon explode en split te gaan gebruiken. Dat gaat net ff sneller dan regular expressions. Daarnaast is jouw formaat dermate simpel te parsen dat een regex niet nodig is. Gewoon exploden per regel op je scheidingsteken, en dan heb je per regel een array met waarden :)

Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

MisterData schreef op 18 June 2003 @ 08:06:
Ik ben de laatste tijd ook bezig met import van grote databestanden,en ik raadt je aan toch gewoon explode en split te gaan gebruiken. Dat gaat net ff sneller dan regular expressions. Daarnaast is jouw formaat dermate simpel te parsen dat een regex niet nodig is. Gewoon exploden per regel op je scheidingsteken, en dan heb je per regel een array met waarden :)
Dit is inderdaad het simpelst: waar kan gewoon explode()'s en implode()'s gebruiken (of split()'s en join()'s), en als het echt een wat gecompliceerder patroon is pas regexen gaan inzetten (maar dan wel de preg_* varianten, die zijn een stukje sneller).

Rustacean


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    $file = fopen ("test.txt", "r"); // OPEN File
    
    tellertje == 0;
    
    while (!feof ($file)) {
        $regel = fgets ($file); //verwerk regel
                        
        list($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12
,$13,$14,$15,$16,$17,$18,$19) = explode("/n/t",$regel);

        print $type[tellertje];
        print $motor[tellertje];
        
    }   
        
    
    fclose ($file); // CLOSE file
    exit(0);


Dat heb ik nu.. maar hoe krijg ik nu de velden uit die file in de variabelen?
Het wil niet lukken, het beste lijkt een array maar kan nergens een goed voorbeeld vinden hoe ik dat in dit geval moet implementeren

[ Voor 4% gewijzigd door Verwijderd op 18-06-2003 13:19 ]


Acties:
  • 0 Henk 'm!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 02-09 11:02

D2k

nou das toch niet zo moeilijk?
for lusje

for(iets)
{
array[teller]=waarde;
}

Doet iets met Cloud (MS/IBM)


Acties:
  • 0 Henk 'm!

Verwijderd

je datafile is inderdaad redelijk eenvoudig. ik zie zelfs van t/m kolommen staan! is het niet mogelijk op gewoon per regel in te lezen (ik neem aan dat fgets per regel leest, dus tot de \n!). aangezien je weet welke regel moet gaan komen weet je welke columns daar inzitten. dan kun je dus toch gewoon met substr daar steeds het juiste stukje uitkopieren? en dan vervolgens naar het juiste type converteren.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb nu dit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php 
// Importeren van de datafile
// Versie 1.0
                
 $regel[$i]; 
 $regel = file("test.txt");
 $max = count($regel);
    
    $i=0;
    $teller=0;
     
    $merken = array();
    $types = array();
    $bouwjaren = array();

    while ($i < $max) 
    {   

//opdracht 
//  $regel_parts = explode("", $regel[$i]);


    list ($regel_parts[0], $regel_parts[1], $regelparts[2]) = split ('[/t]', $regel[$i]);

    $merken[$i] = $regels_parts[0];
    $types[$i] = $regels_parts[1];
    $bouwjaren[$i] = $regels_parts[2];
    
    //print $i ."---" . $regel[$i] ."<br>"; 
    print $merken[$i];
    print $types[$i];
    print $bouwjaren[$i];
    

    $i++; 
}


MAar hij print dus niks, ik vermoed dat het scheiden met de /t niet goed gaat. loop helemaal vast ,wie kan me helpen???

Acties:
  • 0 Henk 'm!

  • bigben04
  • Registratie: December 2001
  • Laatst online: 30-08 20:47
Probeer eens te splitsen op \t.
Pagina: 1