Avatar billede dank Nybegynder
10. januar 2003 - 01:00 Der er 17 kommentarer og
1 løsning

Filhåndtering i PHP

Hej, har brug for lidt hjælp. Jeg har en fil

data.txt

Den skal jeg via PHP

1: Åbne data.txt
2: Finde > ### begin navn ###
3: Finde > ### end navn ###
4: Slette linierne derimellem (incl. ### linierne)
5: gemme filen

Er der nogen der kan hjælpe mig med sådan et script?

System: Debian Linux/SID(2.4-18), PHP 4.1.2

P.s. Hvis det anstøder nogen, at jeg nu spørger efter denne færdige løsning, så kan i jo bare lade være at hjælpe, Jf, http://www.eksperten.dk/spm/303281 <- mercu8's kommentar.)
Avatar billede Slettet bruger
10. januar 2003 - 01:03 #1
Nu må du tage dig sammen og oprette dine forspøgsler på færdige scripts i den dertil indrettede kategori:

http://www.eksperten.dk/kat/299
Avatar billede fynbo Nybegynder
10. januar 2003 - 01:10 #2
$fil = fopen ("data.txt", "r");
while (!feof ($fil)) {
    $tekst .= fgets($fil, 9999);
}
print $tekst."<br>";
$tekst = preg_replace("/ startnavn (.*) slutnavn /i", "", $tekst);
print $tekst."<br>";
$skriv = fwrite($fil, $tekst);
fclose ($fil);
Avatar billede fynbo Nybegynder
10. januar 2003 - 01:12 #3
sorry.. sådan :)

$fil = fopen ("data.txt", "r+");
while (!feof ($fil)) {
    $tekst .= fgets($fil, 9999);
}
print $tekst."<br>";
$tekst = preg_replace("/ startnavn (.*) slutnavn /i", "", $tekst);
print $tekst."<br>";
$skriv = fwrite($fil, $tekst);
fclose ($fil);
Avatar billede dank Nybegynder
10. januar 2003 - 01:20 #4
prøvede lige sådan her:

<?
£name="filur";
$fil = fopen ("data.txt", "r+");
while (!feof ($fil)) {
    $tekst .= fgets($fil, 9999);
}
print $tekst."<br>";
$tekst = preg_replace("/ ### begin $name ### (.*) ### end $name ### /i", "", $tekst);
print $tekst."<br>";
$skriv = fwrite($fil, $tekst);
fclose ($fil);
?>

Det virkede ikke rigtigt. Der kommer ingen fejl. Men filen bliver bare dobbelt så stor. Det virker som om den bare ligger indholdet af filen oveni igen.

Er det mig der gør det forkert?
Avatar billede dank Nybegynder
10. januar 2003 - 01:21 #5
£name er selv. $name

Men det gør vist ingen forskel ;o)
Avatar billede fynbo Nybegynder
10. januar 2003 - 01:21 #6
nej, det er mig der har dummet mig :/

Retter lige og sender igen :)
Avatar billede fynbo Nybegynder
10. januar 2003 - 01:32 #7
$fil = fopen ("data.txt", "r");
while (!feof ($fil)) {
    $tekst .= fgets($fil, 9999);
}
print $tekst."<br>";
$tekst = preg_replace("/version(.*)binaries/is", "", $tekst);
print $tekst."<br>";
$fil = fopen ("data.txt", "w");
$skriv = fwrite($fil, "$tekst");
fclose ($fil);
Avatar billede fynbo Nybegynder
10. januar 2003 - 01:33 #8
$fil = fopen ("data.txt", "r");
while (!feof ($fil)) {
    $tekst .= fgets($fil, 9999);
}
fclose ($fil);

$tekst = preg_replace("/ ### begin $name ### (.*) ### end $name ### /is", "", $tekst);

$fil = fopen ("data.txt", "w");
$skriv = fwrite($fil, "$tekst");
fclose ($fil);
Avatar billede dank Nybegynder
10. januar 2003 - 01:43 #9
Fynbo > JEg sætter umådeligt meget pris på du vil hjælpe.. Men jeg kan altså ikke få det til at virke.

session:
blackbox:~/thehotel# php4 re.php
X-Powered-By: PHP/4.1.2
Content-type: text/html
blackbox:~/thehotel#

Der kommer ingen fejl eller lignende.

Kan det have noget at gøre med $skriv - kan ikke lige se hvad denne skal bruges til?
Avatar billede fynbo Nybegynder
10. januar 2003 - 01:50 #10
kan du skrive den kode du bruger?
Avatar billede fynbo Nybegynder
10. januar 2003 - 01:51 #11
$skriv bruges til at skrive indholdet tilbage i filen igen
Avatar billede fynbo Nybegynder
10. januar 2003 - 01:51 #12
har lige testet på min.. virker fint nok.. er der skriverettigheder på filen?
Avatar billede dank Nybegynder
10. januar 2003 - 02:07 #13
ok, koden ser sådan ud:

#!/usr/bin/php4
<?
$name="111";
$fil = fopen ("data.txt", "r");
while (!feof ($fil)) {
    $tekst .= fgets($fil, 9999);
}
fclose ($fil);

$tekst = preg_replace("/ ### begin $name ### (.*) ### end $name ### /is", "", $tekst);

$fil = fopen ("data.txt", "w");
$skriv = fwrite($fil, "$tekst");
fclose ($fil);

---------------

Min testfil ser sådan her ud:


### begin 123 ###
1
2
3
### end 123 ###

### begin 111 ###
1
2
3
### end 111 ###

### begin 223 ###
1
2
3
### end 223 ###

og jeg har rettigheder til at skrive. jeg er logget på linuxboksen som root og har chmod'et til 777 bare for at være sikkert :)
Avatar billede fynbo Nybegynder
10. januar 2003 - 12:22 #14
$tekst = preg_replace("/### begin $name ###(.*)### end $name ###/is", "", $tekst);

istedet :)
Avatar billede dank Nybegynder
10. januar 2003 - 13:44 #15
ikke mindre end yderst genialt :o) Tusind tak for hjælpen

opret svar til velfortjente point. :)
Avatar billede dank Nybegynder
10. januar 2003 - 13:45 #16
var det kun pga det mellemrum før ###, at det ikke virkede?
Avatar billede fynbo Nybegynder
11. januar 2003 - 18:06 #17
Yes, det var fordi den krævede den præcise streng, og det var jo ikke mellemrum i din tekstfil :)
Avatar billede dank Nybegynder
11. januar 2003 - 18:09 #18
oki :o) Tak for hjælpen..
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