Avatar billede eaglewing Nybegynder
20. september 2005 - 23:35 Der er 14 kommentarer og
1 løsning

Parsing af tekstfil

Hejsa,

Først er her lige et exempel på den tekstfil jeg skal have parset:
------- tekst fil begynd ------
487587391
SWG.Starsider.auctioner
Vendor Sale Complete
TIMESTAMP: 1126729113
Vendor: Looted and special made furniture has sold A Camera to Malichai for 5000 credits.
The sale took place at Tatooine, on Tatooine.
------- tekst fil slut ------

Umiddelbart er det jo meget simpelt, jeg skal bruge enkelte data fra teksten.

som resultat skal jeg have en variable med en brugbar dato (taget fra timestamp), navnet på tingen solgt (i dette exempel "A Camera", prisen ("5000") samt navnet på personen det købte det ("Malichai").

Jeg er ret sikkert på at det er er forholdsvis nemt, jeg kan sagtens se strukturen i det, men mig og Ereg er ikke gode venner, og da jeg prøvede at konverete timestamp fik jeg underlige datoer :)
Avatar billede kjulius Novice
21. september 2005 - 01:23 #1
Jeg går ud fra, at der er tale om en UNIX timestamp, som iflg. siden http://www.4webhelp.net/us/timestamp.php kan oversættes til:

Wednesday, September 14th 2005, 20:18:33 (GMT)

En anden side, som giver denne mulighed er http://www.csgnetwork.com/unixds2timecalc.html

Her er selve algoritmen lavet i JavaScript, som man kan se med Vis Source i browseren. Det bør du kunne lære noget af.
Avatar billede kjulius Novice
21. september 2005 - 01:30 #2
En UNIX timestamp angiver antallet af sekunder siden 1. januar 1970.
Avatar billede kjulius Novice
21. september 2005 - 01:33 #3
Fra siden http://www.unixtimestamp.com/ kan du downloade en calculator (en php fil).
Avatar billede dmdisco Nybegynder
21. september 2005 - 08:21 #4
det bliver nok svært at opdele den sætning med varen der er solgt med mindre at vendoren er den samme hver gang
Avatar billede eaglewing Nybegynder
21. september 2005 - 08:54 #5
dmdisco:
Det er den ikke.. jeg forestillede mig noget med at bruge ereg på at finde det.
Fx. prisen ligger ALTID mellem "for" og "credits" navnet altid mellem "to" og "for" og navnet på tingen der er solgt ligger altid mellem "sold" og "to". med det information burde man kunne bruge ereg, desværre magter jeg altså ikke at fatte noget af ereg syntax.

kjulius:
Kigger lige på de links du har givet når jeg er lidt mere vågen.
Avatar billede dmdisco Nybegynder
21. september 2005 - 09:20 #6
jeg prøver lige at se om jeg kan finde en brugbar løsning men det tager nok lige lidt
Avatar billede dmdisco Nybegynder
21. september 2005 - 09:36 #7
kønt er det ikke men det virker (og jeg er ikke stærk nok i regex endnu)

<pre>
<?php
$var = "487587391
SWG.Starsider.auctioner
Vendor Sale Complete
TIMESTAMP: 1126729113
Vendor: Looted and special made furniture has sold A Camera to Malichai for 5000 credits.
The sale took place at Tatooine, on Tatooine.";
$ts = explode("TIMESTAMP: ", $var);
print_r($ts);
$ts = explode("\n", $ts[1]);
$item = explode("has sold ", $ts[1]);
$item = explode(" to ", $item[1]);
$name = explode(" for ", $item[1]);
print $item[0]."\n";
print $name[0]."\n";
print $ts[0]."\n";
?></pre>
Avatar billede dmdisco Nybegynder
21. september 2005 - 09:38 #8
du kan selv lave dit dato som du vil ha det
http://dk2.php.net/manual/da/function.date.php

plejer selv at bruge:
print date("d-m-Y H:i:s", $ts[0]);
Avatar billede dmdisco Nybegynder
21. september 2005 - 10:08 #9
$array = preg_split("/TIMESTAMP: |\nVendor:|sold |to |for /", $var);
$item = $array[3];
$name = $array[4];
$date = date("d-m-Y H:i:s", $array[1]);
Avatar billede eaglewing Nybegynder
21. september 2005 - 18:31 #10
Kunne ikke lige få dit svar med preg til at virker, men dit exempel med explode virkede fint, så du får point :) mange tak :)
Avatar billede dmdisco Nybegynder
21. september 2005 - 18:42 #11
hmm det virkede fint for mig har du skrevet det som det står her?

$var = "487587391
SWG.Starsider.auctioner
Vendor Sale Complete
TIMESTAMP: 1126729113
Vendor: Looted and special made furniture has sold A Camera to Malichai for 5000 credits.
The sale took place at Tatooine, on Tatooine.";

$array = preg_split("/TIMESTAMP: |\nVendor:|sold |to |for /", $var);
$item = $array[3];
$name = $array[4];
$date = date("d-m-Y H:i:s", $array[1]);
Avatar billede dmdisco Nybegynder
21. september 2005 - 18:43 #12
og så bare

print "Name: $name<br>Item: $item<br>Date: $date";
Avatar billede eaglewing Nybegynder
21. september 2005 - 18:48 #13
Ja, tror der måske ligger en forskel i at have teksten i en variable, og så som jeg gør, henter den ind fra en fil, betyder ikke noget - explode virker, scriptet virker, jeg er glad - hvis jeg bare kunne få lov at give dig dine point hehe, men der sker nada når jeg trykker accepter.
Avatar billede eaglewing Nybegynder
21. september 2005 - 18:48 #14
Sådan :)
Avatar billede dmdisco Nybegynder
21. september 2005 - 18:50 #15
hehe ohh well takker for points
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