Avatar billede eds Nybegynder
12. januar 2009 - 15:42 Der er 10 kommentarer og
1 løsning

Hjælp til sletning af linje i txt-fil

Hej, jeg har følgende kode:

<?php
$k = 0;
$subscribers = file("sub.txt");
unset($subscribers[2]);
while ($k < sizeof($subscribers))
{

  if ($k == 0)
  {
    $fp = fopen("test.txt" , "w");
    fputs($fp , $subscribers[$k]);
    fclose($fp);
  }
  else
  {
    $fp = fopen("test.txt" , "a");
    fputs($fp , "\r".$subscribers[$k]);
    fclose($fp);
  }

$k = $k + 1;
}

?>


Det jeg vil kunne med denne kode er at tage filen sub.txt og slette en linje fra denne fil, for så at skrive det til en ny fil.
Når jeg kører scriptet sletter den ikke en linje, men to og desuden indsætter den også en blank linje.
Altså hvis jeg har en sub.txt, der ser således ud:

----------
Linje 1
Linje 2
Linje 3
Linje 4
Linje 5
----------

Vil den resulterende test.txt se således ud:
----------
Linje 1
Linje 2
Linje 3
          <--- blank linje
----------

Hvordan retter jeg dette?

På forhånd tak.
Avatar billede jarner Nybegynder
12. januar 2009 - 17:04 #1
Prøv at bytte
unset($subscribers[2]);

Ud med
unset($subscribers[count($subscribers)-1]);
Avatar billede eds Nybegynder
12. januar 2009 - 17:09 #2
Så slettes den sidste og der er en blank linje?
Avatar billede jarner Nybegynder
12. januar 2009 - 17:11 #3
var det ikke den sidste linie du ville have slettet?
Avatar billede jarner Nybegynder
12. januar 2009 - 17:26 #4
Desuden hvis det bare er den sidste linie der skal slettes, tror jeg dette er mere effektivt:

$subscribers = file("sub.txt");
$fp = fopen("test.txt" , "w");
for ($i = 0; $i < sizeof($subscribers)-1; $i++) {
    fputs($fp , $subscribers[$i]);
    }
fclose($fp);
Avatar billede eds Nybegynder
12. januar 2009 - 17:26 #5
Nej det er en vilkårlig linje :)
Avatar billede jarner Nybegynder
12. januar 2009 - 17:44 #6
Altså en tilfældig linie eller en man selv definerer?

Ellers vil jeg tro det er noget med at definere linienummer der skal slettes, køre en løkke og inde i løkken lave en betinget sætning der afgør hvad der skal se hvis den når det nummer(altså ingenting)
Avatar billede majbom Novice
12. januar 2009 - 17:59 #7
hvordan ved den hvilken linje der skal slettes? ud fra linje-nummer eller ud fra lunjens indhold, eller som jarner også spørger om; en helt tilfældig linje..?
Avatar billede eds Nybegynder
12. januar 2009 - 19:11 #8
I linje 4 har jeg jo lavet en unset($subscribers[2]); , jeg vil derfor gå ud fra at den fjerner denne værdi fra mit array. Og når den så løber løkken igennem skulle den vel ikke skrive array-værdien på position 2 ud vel? Eller har jeg misforstået noget?
Avatar billede majbom Novice
12. januar 2009 - 19:42 #9
når du har la et din unset, så prøv:

$subscribers = array_values($subscribers);

det skulle gerne "rydde op" i dit array efter unset
Avatar billede eds Nybegynder
12. januar 2009 - 21:05 #10
ah ja, det ser ud til at virke nu. Tak for det. Smid et svar og du skal få dine point :)
Avatar billede majbom Novice
13. januar 2009 - 08:43 #11
selv tak :)
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