Een tekst beter leesbaar maken in php

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik wil graag een tekst die elke keer verschillend is maar wel de zelfde opbouw heeft beter leesbaar maken en in een tabel zetten.

Dus dan wordt het zoiets
Voorbeeld:

01-01-01 12:00:00 kat vs hond
Troops (losses) Troops (losses)
Mens 1 (0) -
Muis 105 (12) -
Vogel 63 (4) -
Koe 37 (2) -
Jongen - 19 (19)
Kip - 12 (12)
Bot - 5 (5)
Stad1 vs Stad 2 and stole 8995 (100%) Botjes:
500 500 500 500 500


Dus hij is altijd weer anders, maar er zijn bijvoorbeeld maar een aantal namen. Dus die blijven wel altijd het zelfde. Maar de getallen erachter niet.

Weet iemand misschien hoe ik dit kan oplossen? Bijvoorbeeld dat er voor troops zoveel spatie's komen en dat Troop's bijvoorbeeld dikgedrukt wordt.

Alvast bedankt,

Mvg,
Spinlock

[ Voor 9% gewijzigd door Verwijderd op 08-11-2008 18:04 ]


Acties:
  • 0 Henk 'm!

  • job
  • Registratie: Februari 2002
  • Laatst online: 03:36

job

Waar komt die tekst vandaan? Uit een database? Uit een los bestand?

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Ik zou dit met met de <b> html-tag doen en & nbsp; :)

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Dit komt overduidelijk van een online browserspelletje.
Je beste keuze hiervoor is regex of splitten op een gereversede string (of dus de laatste elementen uit de split pakken)

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
job schreef op zaterdag 08 november 2008 @ 13:07:
Waar komt die tekst vandaan? Uit een database? Uit een los bestand?
Het is gewoon kopieer plak werk.
Noork schreef op zaterdag 08 november 2008 @ 13:09:
Ik zou dit met met de <b> html-tag doen en & nbsp; :)
Dat moet juist automatisch gebeuren, omdat de tekst elke keer weer anders is.
krvabo schreef op zaterdag 08 november 2008 @ 13:14:
Dit komt overduidelijk van een online browserspelletje.
Je beste keuze hiervoor is regex of splitten op een gereversede string (of dus de laatste elementen uit de split pakken)
Goed gezien ;)
Kun je nog wat meer uitleg geven? Bijvoorbeeld hoe ik dit het beste aan kan pakken?

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
De meest simpele oplossing is om gewoon te exploden op \n of \r.

Als de data vrijwel dezelfde format is kan je dus zeggen
line 0 = datum
line 1 = troops
line 2 tot n = namen
laatste lijn = totaal

Acties:
  • 0 Henk 'm!

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Schrijf eerst gewoon eens de HTML op die je wilt gebruiken. Een tabel of een UL waarschijnlijk. Daarna kun je nadenken hoe je dat met PHP tot stand gaat brengen.

TabCinema : NiftySplit


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
xxxxxxxx 1 (0) -
x 105 (12) -
xxx 63 (4) -
xxxxx 37 (2) -
xx - 19 (19)
xxxx - 12 (12)
xxxxxxx - 5 (5)
Dat kan ook zo groot zijn
xxxxxxxx 1 (0) -
x 105 (12) -
xxx 63 (4) -
xxxxx 37 (2) -
xx - 19 (19)
xxxx - 12 (12)
xxxxxxx - 5 (5)
xxxxxxxx 1 (0) -
x 105 (12) -
xxx 63 (4) -
xxxxx 37 (2) -
xx - 19 (19)
xxxx - 12 (12)
xxxxxxx - 5 (5)
Dus 2x zo groot. (kan ook meer of minder)

Kan het dan nog steeds?
Bozozo schreef op zaterdag 08 november 2008 @ 13:49:
Schrijf eerst gewoon eens de HTML op die je wilt gebruiken. Een tabel of een UL waarschijnlijk. Daarna kun je nadenken hoe je dat met PHP tot stand gaat brengen.
Is het niet eerst beter om gewoon te zorgen dat ik het gewoon eerst goed leesbaar krijg d.m.v dikgedrukt en dat alles op goede lijnen onder elkaar staat? Of is het beter om de tabel te doen en dan proberen om daar alles goed in te krijgen?

[ Voor 35% gewijzigd door Verwijderd op 08-11-2008 13:53 ]


Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Verwijderd schreef op zaterdag 08 november 2008 @ 13:38:
[...]

Goed gezien ;)
Kun je nog wat meer uitleg geven? Bijvoorbeeld hoe ik dit het beste aan kan pakken?
Een regex zou de -mooiste- en meest compacte oplossing zijn, maar dat is qua niveau best geavanceerd. Als je het wilt gebruiken moet je even googlen op 'regex' of 'regular expressions'.
Als je zou gaan splitten, (afgezien van str_replace) de meest simpele oplossing, dan is het vrij simpel:
Doe eerst zoals Megamind zegt een explode op \n, dan houd je een array met alle regels over.
Als je daarna met een for-loop weer alle resultaten doorloopt kun je elk resultaat weer exploden op een spatie.
Als je eerst de string omdraait (dus bla 123 wordt dan 321 alb) en dan split, heb je het deel achteraan als eerste. Ik neem aan dat het daar om gaat. Ik weet namelijk niet of er spaties voorkomen in je tekst ;)
Daarna is het nog een kwestie van het resultaat weer omdraaien zodat je weer 123 krijgt.

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok ik zal het proberen ;) Bedankt voor de snelle hulp!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok snap nu dus hoe je zo'n tekst moet exploden.. En hoe je die daarna weer kan weergeven per stukje(woord).
Maar nu probeer ik om een stukje tekst goed te laten weer geven? Maar die tekst is altijd anders normaal altijd anders.

Bijvoorbeeld er kunnen soms ook meer regels in voorkomen. Aangezien dit van een browsergame is zal het begin en het eind altijd wel het zelfde blijven. Maar het middenstuk van de troepen niet. Kan dat dan wel met explode?

En ik heb nu dit
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$tekst = "" . $_POST["text"] . "";
$verwerken = explode  (" ", $tekst);
echo $verwerken[0];
echo $verwerken[1];
echo $verwerken[2];
echo $verwerken[3];
echo $verwerken[4];
echo $verwerken[5];
echo $verwerken[6];
echo $verwerken[7];
echo $verwerken[8];
echo $verwerken[9];
echo $verwerken[10];
echo $verwerken[11];
echo $verwerken[12];
echo $verwerken[13];
echo $verwerken[14];
?>


Waarschijnlijk ziet het er heel onhandig uit ;) Maar hoe voeg ik dan die \n toe? Ik heb al aardig wat manieren geprobeerd..

Acties:
  • 0 Henk 'm!

Verwijderd

echo $verwerken[x].'\n';

[ Voor 4% gewijzigd door Verwijderd op 08-11-2008 15:32 ]


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Wel met dubbele quotes dan "\n" want met single quotes werkt dat niet...

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op zaterdag 08 november 2008 @ 14:49:
Waarschijnlijk ziet het er heel onhandig uit ;) Maar hoe voeg ik dan die \n toe? Ik heb al aardig wat manieren geprobeerd..
Ik stel voor dat je even wat gaat lezen over strings in PHP voordat je weer zo'n vraag stelt. :) We willen je best helpen maar de basiskennis die je nodig hebt om een regeleinde aan een string toe te voegen moet je zelf wel kunnen opdoen. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Ik zou eerst regel voor regel exploden en dan pas woord voor woord.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok bedankt ;) ik heb het wat doorgelezen.. Het lukt al min of meer. Een spatie toevoegen lukt me.
Een enter ook d.m.v <BR \> (mag dat?) Maar 2 spatie's achter elkaar lukt me niet. Dat is toch wel mogelijk lijkt me? En ik kan het nergens zien daar op die pagina zien.

Ik zelf dacht gewoon nadat ik alles gelezen had gewoon 2x hetzelfde achter elkaar.. Maar dan gebeurt er niks.
En ik snap nog steeds niet hoe ik dan uiteindelijk zo'n stuk tekst goed kan laten weergeven. Terwijl het middenstuk steeds meer of minder regels bevat..?

EDIT: Maar de tekst kan vaak meerdere regels bevatten of juist minder. Dan kan het toch mislopen? Dat er bij de laatste regel bijvoorbeeld meer spatie worden tussen gezet. Dan wordt die juist minder leesbaar?

[ Voor 16% gewijzigd door Verwijderd op 08-11-2008 17:53 ]


Acties:
  • 0 Henk 'm!

  • Joolee
  • Registratie: Juni 2005
  • Niet online
Je geeft nu allemaal xxxjes op de plekken waar bepaalde tekst staat, zet daar eens betere voorbeelden neer.

En hoe wil je de informatie uiteindelijk op het scherm gaan tonen? Pas als je een begin en gewenste eindsituatie hebt kun je wat gaan rommelen met code om het te automatiseren. Zolang je niet weet wat je wilt kun je het met code niet oplossen. :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb het veranderd naar een beter voorbeeld ;) Zo ziet het er normaal ook ongeveer uit. Alleen de namen zijn anders..

Ik kan het nu zover krijgen:

01-01-01 12:00:00 kat vs hond Troops
(losses) Troops (losses)
Mens 1 (0) -

Op de een of andere manier wordt Troops achter Hond geplakt :s krijg het niet uit elkaar.

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Geef nou eens gewoon een resultaat van tekst?
We hebben vrij weinig aan 'zo ongeveer'.
Als er meerdere spaties tussenzitten worden deze op GoT gefiltert, dus zet je tekst dan tussen [pre] en [/pre].

Op die manier kunnen we je tenminste fatsoenlijk helpen ipv gokken ;)

edit: Dus gewoon -alle- regels, liever meer dan minder.

[ Voor 9% gewijzigd door krvabo op 08-11-2008 18:09 ]

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
08-11-08 14:26:06	 Together 	 vs 	 Xydeiq
	Troops (losses) 		Troops (losses)
 Kontaratoi  	16 (0) 		-
 Skoutatoi  	127 (0) 		-
 Varangian Guard  	64 (0) 		-
 Peltastoi  	20 (0) 		-
 Mourtatoi  	33 (0) 		-
 Kataphrakt  	64 (0) 		-
 Caveman  	- 		1 (1)
 Warrior  	- 		1 (1)
 Spinlock attacked Valeria and stole 16621 (100%) resources:
4744 5341 1887 2703 1946 


Rechtstreeks gekopieerd ;)

[ Voor 35% gewijzigd door Verwijderd op 08-11-2008 18:18 ]


Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Je hebt dus ook tabs ( \t ).
Wordt het alleen door jou gebruikt of ook door anderen?
Internet Explorer gebruikt als enige spaties bij het kopiëren van tekst uit een tabel, de rest van de browsers (firefox, opera, etc) tabs.

Als het alleen door jou wordt gebruikt, of alleen door gebruikers van firefox / opera / etc dan kun je overwegen om te splitten op "\t".

Het lijkt me toch het beste dat je gaat werken met regex, al denk ik niet dat je op dat niveau zit.

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Eigenlijk moet het gewoon bij alle browsers werken.
En nee ik denk niet dat ik op dat niveau zit. Je moet echt een prof php'er zijn voordat je regex echt begrijpt?

Het zal niet goed gaan werken met de andere oplossingen?

[ Voor 20% gewijzigd door Verwijderd op 08-11-2008 19:28 ]


Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Omdat ik toch even niets te doen had heb ik een voorbeeldje gemaakt hoe je het anders zou kunnen gebruiken.
Het resultaat is hier te zien: http://krijn.net/dump/got.php

Code:
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
<?
$string = '08-11-08 14:26:06     Together    vs      Xydeiq
    Troops (losses)         Troops (losses)
 Kontaratoi     16 (0)      -
 Skoutatoi      127 (0)         -
 Varangian Guard    64 (0)      -
 Peltastoi      20 (0)      -
 Mourtatoi      33 (0)      -
 Kataphrakt     64 (0)      -
 Caveman    -       1 (1)
 Warrior    -       1 (1)
 Spinlock attacked Valeria and stole 16621 (100%) resources:
4744 5341 1887 2703 1946 ';

$splitstring = explode("\n", $string);

for ($i = 2; $i < count($splitstring); $i++) {

    print('<br>Originele string: '.$splitstring[$i]);
    $splitstring[$i] = trim($splitstring[$i]);

    $tmpStr = explode(" ", strrev($splitstring[$i]));

    for ($o = 0; $o < count($tmpStr); $o++) {
        print('<br>     part: '.$o.'; value: '.strrev($tmpStr[$o]));
    }

    print '<br><br>';
}
?>


Zoals je ziet wordt het dus onhandig als je bij dubbele namen uitkomt (namen met spaties).
Je *kan* het wel netjes krijgen hoor, maar dan heb je een weinig dynamische parser welke bij een websiteverandering al kapot is.

[ Voor 10% gewijzigd door krvabo op 08-11-2008 20:12 ]

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • Patriot
  • Registratie: December 2004
  • Laatst online: 19:24

Patriot

Fulltime #whatpulsert

Als je je reguliere expressies eigen wilt maken dan kan ik je de website regular-expressions.info aanraden. Daar leggen ze stap voor stap uit hoe een regex werkt, je hebt de basis vrij snel onder de knie. Met jouw tekst ernaast kun je dan direct wat dingen testen. Zo zul je zien dat je in no-time iets hebt dat beter werkt dan bovenstaande (NOFI krvabo ;)).

Een voorbeeld van een regex die de lijstje met troepen (aantallen en verliezen) kan matchen is deze:

code:
1
/([a-zA-Z0-9_-]*?)(?:[\s]+)(-|([0-9]+) \(([0-9]+)\))(?:[\s]+)(-|([0-9]+) \(([0-9]+)\))/


Het is misschien niet de meest elegante oplossing (ik werk er al weer een tijdje mee maar durf niet te zeggen dat ik een expert ben), maar het werkt wel.

Als je nou wil weten wat het doet, dan zou ik vooral de eerdergenoemde website even doornemen. Neem er wel de tijd voor, je bent niet met een half uurtje klaar.

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

Patriot schreef op zondag 09 november 2008 @ 03:10:
Zo zul je zien dat je in no-time iets hebt dat beter werkt dan bovenstaande (NOFI krvabo ;)).
Ik beweer ook nergens dat het (goed) werkt.
Ik zeg dat je problemen kunt krijgen als je het split/explode (wat de TS dus wil doen) en laat zien hoe het moet. ;)

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok dan zal ik maar eens wat gaan leren over regex ;) Jullie horen over een tijdje wel weer wat. ;) Tot die tijd probeer ik eerst maar eens regex uit te vogelen.

Acties:
  • 0 Henk 'm!

  • CMG
  • Registratie: Februari 2002
  • Laatst online: 10-12-2024

CMG

Patriot schreef op zondag 09 november 2008 @ 03:10:
Als je je reguliere expressies eigen wilt maken dan kan ik je de website regular-expressions.info aanraden. Daar leggen ze stap voor stap uit hoe een regex werkt, je hebt de basis vrij snel onder de knie. Met jouw tekst ernaast kun je dan direct wat dingen testen. Zo zul je zien dat je in no-time iets hebt dat beter werkt dan bovenstaande (NOFI krvabo ;)).

Een voorbeeld van een regex die de lijstje met troepen (aantallen en verliezen) kan matchen is deze:

code:
1
/([a-zA-Z0-9_-]*?)(?:[\s]+)(-|([0-9]+) \(([0-9]+)\))(?:[\s]+)(-|([0-9]+) \(([0-9]+)\))/


Het is misschien niet de meest elegante oplossing (ik werk er al weer een tijdje mee maar durf niet te zeggen dat ik een expert ben), maar het werkt wel.

Als je nou wil weten wat het doet, dan zou ik vooral de eerdergenoemde website even doornemen. Neem er wel de tijd voor, je bent niet met een half uurtje klaar.
Is dit niet een fijnere regex?

code:
1
\s*(?<unit1>[a-zA-Z\s]+?)[\s|\t]*(\-|(?<aantal1>[\d|\-]+)\s+\((?<losses1>[\d|\-]+)\))[\s|\t]*(\-|(?<aantal2>[\d|\-]+)\s+\((?<losses2>[\d|\-]+)\))


Is in ieder geval een stuk leesbaarder. Heb ff wat gespeeld, maar op deze manier heb je ook geen onnodige spaces in de naam en namen met een spatie in doen het goed (bij jou regex heet Varangian Guard gewoon Guard).

[ Voor 0% gewijzigd door CMG op 09-11-2008 23:26 . Reden: typo's ]

NKCSS - Projects - YouTube


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmm hier snap ik nog niet veel van. Het wordt me vanzelf wel duidelijk denk ik ;) Wanneer ik het een beetje snap zal ik er even echt goed naar kijken ;)
Pagina: 1