Gå til innhold

Printe enkelte deler fra .txt-fil


Anbefalte innlegg

Jeg prøver for tiden å lage et lite 'uptime'-script for min hjemmeside.

Scriptet skal printe ut oppetiden på serveren, på denne måten: Uptime: X day(s) and X hour(s).

 

Jeg har nå lastet ned uptime.exe fra Microsoft sine nettsider, og bruke denne koden for å lagre innholdet i en .txt-fil:

 

$uptime = exec ("uptime.exe > uptime.txt");

 

Det som lagres i 'uptime.txt' er følgende:

\\S1GH has been up for: X day(s), X hour(s), X minute(s), X second(s)

 

- X er selvfølgelig antall dager, timer, minutter og sekunder.

 

Dette føler jeg blir litt kronglete å bruke på hjemmesiden, så lurer derfor på hvordan jeg kan 'formatere' teksten, sånn at bare enkelte deler blir printet ut.

I dette tilfellet: Uptime: X day(s) and X hours(s).

 

 

- Hvordan gjør man dette?

(vet liksom ikke hva jeg skal søke på heller, så Google har ikke akkurat vært min venn).

 

 

//s1gh

Endret av Sigh
Lenke til kommentar
Videoannonse
Annonse

Denne tar inn alt, med teksten bak for dager og timer. Kan tilpasses.

$text = '\\S1GH has been up for: 4 day(s), 14 hour(s), 34 minute(s), 5 second(s)';
if (preg_match('/(\d+ day\(s\)), (\d+ hour\(s\))/', $text, $matches)) {
//found, put in $matches
print_r($matches);
} else {
//could not find uptime values
}

Denne bruker mer "vanlige" metoder for dem som ikke kan regex.

$text = '\\S1GH has been up for: 4 day(s), 13 hour(s), 4 minute(s), 4
second(s)';
print_r($matches = sscanf(substr($text, strpos($text, ':') + 2), '%d day(s), %d
hour(s), %d
minute(s), %d
second(s)'));

 

Eg lærte regex fra denne boken, anbefales for alle som gjør tekst søk/erstatt.

http://books.google.no/books?id=ucwR4KIvExMC&dq

Endret av OISNOT
Lenke til kommentar

Nå vet jeg ikke helt om det er mulig å gjøre det på denne måten, men uansett:

 

$test = exec ("uptime.exe");

print_r($matches = sscanf(substr($test, strpos($test, ':') + 2), '%d day(s), %d hour(s), %d minute(s), %d second(s)'));

 

Dette er det som blir printet:

Array ( [0] => 0 [1] => 7 [2] => 11 [3] => 32 )

 

Fikk også Array + noe annet, når jeg prøvde den andre funksjonen.

 

Er det feil, eller blir det printet på den måten? :)

 

 

Edit: Ahh, tror kanskje jeg skjønte det.

Det printes ut i forskjellige arrays, som jeg senere kan bruke til å printe det jeg vil, eller?

Endret av Sigh
Lenke til kommentar
Edit: Ahh, tror kanskje jeg skjønte det.

Det printes ut i forskjellige arrays, som jeg senere kan bruke til å printe det jeg vil, eller?

Ja, for begge metodene blir $matches et array med verdiene.

I regex metoden returneres teksten med verdien.

I sscanf metoden returneres kun verdiene.

For å returnere verdiene med regex kan du endre til:

preg_match_all('/(?:(\d+) (day|hour|minute|second)\(s\))+/', $text, $matches)

Lenke til kommentar
Edit: Ahh, tror kanskje jeg skjønte det.

Det printes ut i forskjellige arrays, som jeg senere kan bruke til å printe det jeg vil, eller?

Ja, for begge metodene blir $matches et array med verdiene.

I regex metoden returneres teksten med verdien.

I sscanf metoden returneres kun verdiene.

For å returnere verdiene med regex kan du endre til:

preg_match_all('/(?:(\d+) (day|hour|minute|second)\(s\))+/', $text, $matches)

 

 

Ahh, takk. DA skjønner jeg litt mer! :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...