[PHP]Verwijderen deel van de text en printen

Pagina: 1
Acties:
  • 205 views sinds 30-01-2008
  • Reageer

Onderwerpen


Verwijderd

Topicstarter
Ik wil een txt file inlezen en daarvan een deel van de text weglaten en het overgebleven deel outputten.

Neem bijvoorbeeld dit deel van de text:

In uitslagen.txt heb ik bijvoorbeeld staan

naam: Ruud
naam: Jan
naam: Piet

Ik wil het outputten zonder de string 'naam', het resultaat is dus:

Ruud
Jan
Piet


Ik heb het geprobeerd met de functie rtrim, en de hele code kunnen jullie hieronder vinden.
Deze code print precies het origineel uit, dit tegen mijn verwachting in aangezien het op php.net zo uitgelegd stond.
Ziet iemand wat er fout gaat?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?

$file= "uitslagen.txt";
$fp=fopen($file,"r");
$content = fread($fp,filesize($file));
fclose($fp);

// maak array met alle regels uit de file
$lines = explode("\n",$content);
// voor elke regel do:
for ($k=0; $k<count($lines); $k++) {
    // maak array met alle waarden uit een regel
    $values = explode("\t",$lines[$k]);
    // voor elke waarde do:
    for ($l=0; $l<count($values); $l++) {
        $value = $values[$l];
        $value = rtrim($value, "naam"); 
        echo ("$value<br>");
     }
}
?> 

  • R4NCOR
  • Registratie: December 2000
  • Laatst online: 16-09 12:26

R4NCOR

eigenlijk gewoon Niels

Je gebruikt explode() al. In principe is dat hier ook prima toepasbaar. Er zit regelmaat, een patroon, in je file, dus dan is het meestal gemakkelijk :)

Een van de mogelijke oplossingen zou zijn hier ook explode() te gebruiken.
code:
1
2
$stukje = explode(": ", $value);
$value = $stukje[1];


Wellicht zijn er efficientere oplossingen, maar als je de logica van explode() volgt is dit met jouw kennis toch prima op te lossen?

  • Osiris
  • Registratie: Januari 2000
  • Niet online
't Moet volgens mij sowieso "filesize($fp)" zijn.
edit:
Hm, filesize wil een echte file en geen filepointer, ok :)
Verder splitst dit script op TAB's ("\t") en niet op bijvoorbeeld dubbele punten.
En verder: waarom gebruik je rtrim? Volgens php.net haalt rtrim meuk weg van ACHTERAAN de string: "rtrim -- Strip whitespace (or other characters) from the end of a string"

Volgens mij zit 't script gewoon niet lekker in elkaar en snap je niet waar je mee bezig bent.

[ Voor 15% gewijzigd door Osiris op 24-02-2005 00:39 ]


  • Bram77
  • Registratie: September 2004
  • Laatst online: 10-07-2023
of...
PHP:
1
2
3
4
5
$file= "uitslagen.txt"; 
$fp=fopen($file,"r"); 
$content = fread($fp,filesize($file));
$content = str_replace("naam: ", "", $content);
fclose($fp);

Verwijderd

Topicstarter
Damzz soms denk een mens te moeilijk terwijl het zooo frickin voor de hand ligt lol

Thanks mate, lost weer een hoop frustraties op :)

In ieder geval mocht iemand nog weten waarom het niet werkt metrtrim dan ben ik daar ook benieuwd naar...

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

NMe

Quia Ego Sic Dico.

Bram77 schreef op donderdag 24 februari 2005 @ 00:41:
of...
PHP:
1
2
3
4
5
$file= "uitslagen.txt"; 
$fp=fopen($file,"r"); 
$content = fread($fp,filesize($file));
$content = str_replace("naam: ", "", $content);
fclose($fp);
str_replace moet nog zoeken in die grote string. Wat dat betreft kun je beter substr gebruiken, aangezien je weet hoeveel tekens je steeds weg moet halen aan het begin (namelijk 6). Aan de andere kant moet dat natuurlijk wel per regel apart. :P
Verwijderd schreef op donderdag 24 februari 2005 @ 00:42:
In ieder geval mocht iemand nog weten waarom het niet werkt metrtrim dan ben ik daar ook benieuwd naar...
Zoals in de manual te vinden is: de trim functies (dus ook ltrim en rtrim) halen whitespace weg aan het begin of eind van een string, of beiden, afhankelijk van welke functie je gebruikt. En "naam:" is natuurlijk geen whitespace. :P

[ Voor 31% gewijzigd door NMe op 24-02-2005 00:45 ]

'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.


Verwijderd

Topicstarter
Thanks iedereen het is mij nu volkomen duidelijk :)

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 21-09 21:35

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

-NMe- schreef op donderdag 24 februari 2005 @ 00:44:
[...]

str_replace moet nog zoeken in die grote string. Wat dat betreft kun je beter substr gebruiken, aangezien je weet hoeveel tekens je steeds weg moet halen aan het begin (namelijk 6). Aan de andere kant moet dat natuurlijk wel per regel apart. :P
Right, zelfs als er een patroon in zou zitten, vraag ik me af wat sneller is. Daarnaast is leesbaarheid van de code belangrijker dan de 0.01 seconde tijdswinst 8)7

[sub]* Thijsmans mompelt iets over file_get_contents ipv fopen/fread 8)7 [/sub]

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


  • Osiris
  • Registratie: Januari 2000
  • Niet online
Prammenhanger schreef op donderdag 24 februari 2005 @ 00:52:
[...]

* Osiris mompelt iets over file_get_contents ipv fopen/fread 8)7
Je zou natuurlijk ook file() icm een loopje met substr kunnen gebruiken B)

  • Bram77
  • Registratie: September 2004
  • Laatst online: 10-07-2023
Ik kies ook voor leesbaarheid en dus een zo min mogelijk complex script. Maar dat is natuurlijk smaak-gebonden en per situatie verschillend.
Als je een bestand van MB's groot moet checken dan is substr() misschien de betere oplossing.

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

NMe

Quia Ego Sic Dico.

Prammenhanger schreef op donderdag 24 februari 2005 @ 00:52:
Right, zelfs als er een patroon in zou zitten, vraag ik me af wat sneller is. Daarnaast is leesbaarheid van de code belangrijker dan de 0.01 seconde tijdswinst 8)7
Eensch, ik noemde slechts een optie. :+
/me mompelt iets over file_get_contents ipv fopen/fread 8)7
Die doet het niet in elke versie van PHP (pas vanaf 4.3.0). ;) Ik heb die functie zeer recentelijk zelf nog moeten implementeren omdat ik hem vaak gebruikt had in mijn code, terwijl mijn webserver het niet leek te ondersteunen. :X Wat dat betreft is fopen/fread wel waterdicht.

'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.


  • T-MOB
  • Registratie: Maart 2001
  • Nu online
Verwijderd schreef op donderdag 24 februari 2005 @ 00:32:

Ik heb het geprobeerd met de functie rtrim, en de hele code kunnen jullie hieronder vinden.
De oplossing is al genoemd, maar als je het met een trimfunctie wil doen dat moet je natuurlijk ltrim() hebben om van links te trimmen. Een trim variant is echter sowieso niet te gebruiken omdat deze characterbased zijn. Alle karakters die je specificeert worden verwijderd, niet de gehele string:
PHP:
1
2
3
4
$text = 'naam: andre';
echo ltrim($text, 'naam: ');
//output: dre
//omdat de "a" en de "n" in andre voorkomen

[ Voor 5% gewijzigd door T-MOB op 24-02-2005 00:59 ]

Regeren is vooruitschuiven


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 10:37
De mooiste manier lijkt mij om het bestand in een array te stoppen, één regel per key. Vervolgens kun je met array_walk een gebruikersfunctie toepassen. Dit levert de minste hoeveelheid code op.

edit:

De mooie oplossing met substr had ik nog niet gezien eigenlijk :+.

[ Voor 16% gewijzigd door Dennis op 24-02-2005 01:08 ]

Pagina: 1