Avatar billede mysitesolution Nybegynder
24. oktober 2004 - 21:44 Der er 53 kommentarer og
1 løsning

Add \r\n hvis brug for det

hej... har denne kode til at adde en linie til en fil:

function addLine($filename,$text) {

  $lines = file($filename);

  $lines[] = "\r\n" . $text;

  $f = fopen($filename, "w");

  while (list($key, $val) = each($lines))

    fputs($f, $val);

  fclose($f);

}

problemet er så at der nogne gange kommer mellemrum imellem linierne.... SKal gøre så den kun adder \r\n hvis der er brug for det :)
Avatar billede bojo Nybegynder
24. oktober 2004 - 21:47 #1
den tilføjer linieskift i hver fputs, prøv

function addLine($filename,$text) {

  $lines = file($filename);

  $lines[] = "\r\n" . $text;

  $f = fopen($filename, "w");

  while (list($key, $val) = each($lines))

    if( !empty( $val ) )
      fputs($f, $val);

  fclose($f);

}
Avatar billede mysitesolution Nybegynder
24. oktober 2004 - 22:04 #2
nope virker vist ikke..., der kommer stadig den dumme linie ind :(...
Avatar billede bojo Nybegynder
24. oktober 2004 - 22:10 #3
hmmmm, hvis der kommer en "dum" linie ind er det fordi du ber om det :-)

prøv at put noget om det du skriver, så du kan se hvad det "dumme" er


fputs($f, ">".$val."<");
Avatar billede mysitesolution Nybegynder
24. oktober 2004 - 22:12 #4
hmm altså den kommer når jeg sletter en linie med denne funktion:

function removeLine($filename,$number) {

  $lines = file($filename);

  unset($lines[$number]);

  $f = fopen($filename, "w");

  reset($lines);

  while (list($key, $val) = each($lines))

    fputs($f, $val);

  fclose($f);

}
Avatar billede mysitesolution Nybegynder
24. oktober 2004 - 22:14 #5
skal lige siges at det er i en htaccess password fil :)
Avatar billede bojo Nybegynder
24. oktober 2004 - 22:52 #6
Der er noget i $val som vi også talte om den gang du spurgte om at slette en linie, dette skulle løse det

function addLine($filename,$text) {

  $lines = file($filename);

  $lines[] = "\r\n" . $text;

  $f = fopen($filename, "w");

  while (list($key, $val) = each($lines))

    fputs($f, trim($val, "\n");
);

  fclose($f);

}
Avatar billede bojo Nybegynder
24. oktober 2004 - 22:53 #7
nææ - mon forresten, den skriver jo bare en tom linie

5 sek
Avatar billede mysitesolution Nybegynder
24. oktober 2004 - 22:54 #8
skriv lige når du ved mere :)

du får 100 points :) hvis du kan finde ud af det ;)
Avatar billede bojo Nybegynder
24. oktober 2004 - 22:57 #9
joo, tror det alligevel :-)
Avatar billede bojo Nybegynder
24. oktober 2004 - 22:59 #10
men problemet er vist i virkeligheden i din removeLine
Avatar billede mysitesolution Nybegynder
24. oktober 2004 - 22:59 #11
okay, løs det og du får points :)
Avatar billede mysitesolution Nybegynder
24. oktober 2004 - 23:00 #12
function addLine($filename,$text) {

  $lines = file($filename);

  $lines[] = "\r\n" . $text;

  $f = fopen($filename, "w");

  while (list($key, $val) = each($lines))

    fputs($f, trim($val, "\n");
);

  fclose($f);

}

der er fejl i :/
Avatar billede olebole Juniormester
24. oktober 2004 - 23:02 #13
<ole>

Det er en elendig kode, du bruger - men problemet opstår formodentlig kun ved, at du åbner dokumentet og checker.
Skriver du 10 linier i træk, er der sikkert ingen tomme liner. Så åbner du dokumentet checker - og når du efterfølgende skriver linie 11, er der et 'hul' før denne. Er det korrekt?

/mvh
</bole>
Avatar billede mysitesolution Nybegynder
24. oktober 2004 - 23:03 #14
ja det kan meget godt passe....

Kom med en bedre kode :)
Avatar billede olebole Juniormester
24. oktober 2004 - 23:15 #15
Ikke før, jeg kender problemet  :)
Er problemet, at du selv sætter en linie ind, der slutter med et linieskift - eller opstår problemet, som jeg beskrev ovenfor?
Avatar billede bojo Nybegynder
24. oktober 2004 - 23:15 #16
function addLine($filename,$text) {
  if( $fp=fopen($filename, "a")) {
      fputs($fp,$text."\n");
      fclose($fp);
  }
}
Avatar billede mysitesolution Nybegynder
24. oktober 2004 - 23:16 #17
som ovenfor :) jeg fyrer ihvertfald ikke rigtig noget :/
Avatar billede olebole Juniormester
24. oktober 2004 - 23:17 #18
bojo >> du nærmer dig, men det hjælper ikke på problemet. Først må vi jo finde ud af, hvordan/hvorfor probelemet opstår
Avatar billede mysitesolution Nybegynder
24. oktober 2004 - 23:17 #19
som ovenfor :) jeg fyrer ihvertfald ikke rigtig noget ind i slutningen :/ <- rettelse...
Avatar billede olebole Juniormester
24. oktober 2004 - 23:19 #20
Hvad skal du bruge det til?
Skal dokumentet af og til åbnes i f.eks. Notepad - og derefter bruges igen?
Eller er det et dokument, du downloader og åbner.
Eller åbner du det via kode på serveren - og bruger data derfra?
Avatar billede mysitesolution Nybegynder
24. oktober 2004 - 23:22 #21
jeg har en .htpasswd fil... hvor jeg fjerner og tilføjer brugere :) så det hele foregår på server plan...
Avatar billede olebole Juniormester
24. oktober 2004 - 23:26 #22
Jamen, så er der jo ingen grund til at lave noget om. Hvis det hele foregår på serveren - og mellemrum kun opstår, når du downloader/åbner/uploader filen - kan du bare lade være med det.
Alternativt, skal du bare sikre dig, at der ikke er en tom, blank linie i bunden af dokumentet, før du save'er og upload'er. Det er nemlig derved, problemet opstår.
Det er dig selv, der kommer til at lave den tomme linie ved at åbne og save dokumentet  ;o)
Avatar billede mysitesolution Nybegynder
24. oktober 2004 - 23:32 #23
nej nje... den opstår på serveren... men mente at jeg ikke rbugte filen på min egen computer
Avatar billede mysitesolution Nybegynder
24. oktober 2004 - 23:35 #24
Hmm... den kode bojo har givet mig, laver et extra linieskift, og tager ikke de andre linier med :/
Avatar billede bojo Nybegynder
24. oktober 2004 - 23:57 #25
dette virker hos mig, indsætter og sletter som forventet

<?php
function removeLine($filename,$number) {
  $lines = file($filename);
  $f = fopen($filename, "w");
  $x=0;
  while (list($key, $val) = each($lines)) {
    if( ++$x != $number ) // hvis det ikke er linie nummer $number
      fputs($f, $val);  // så skriv den
  }
  fclose($f);
}


function addLine($filename,$text) {
  if( $fp=fopen($filename, "a")) {
      fputs($fp,$text."\n");
      fclose($fp);
  }
}

$fil="test1.txt";
unlink($fil);

for( $x=1; $x<=10;$x++) {
  addLine($fil, "lin $x");
}
removeLine($fil, 3);

addLine( $fil, "ny lin 10");
removeLine( $fil, 9 );

?>
Avatar billede olebole Juniormester
24. oktober 2004 - 23:57 #26
Den kode, bojo har skrevet, har du jo slet ikke prøvet ... så ville du ikke skrive, som du gør.
Avatar billede olebole Juniormester
25. oktober 2004 - 00:00 #27
Nej bojo, nu er du tilbage i en gabende langsom kode, der er helt unødvendig  :)


mysitesolution >> det mellemrum _er_ noget, du selv stopper i filen. Den kode, du har skrevet, _kan_ ikke lave det mellemrum. Du skal lede efter fejlen et andet sted i din kode, for det er ikke i denne kode, den opstår.
Avatar billede mysitesolution Nybegynder
25. oktober 2004 - 00:01 #28
der er ikke andre steder hvor jeg ÆNDRE i filen...

nej det er rigtigt, ændrede a til w fordi det ikke virkede :/


prøver lgie bojos kode
Avatar billede bojo Nybegynder
25. oktober 2004 - 00:02 #29
jeg ved det, men jeg fatter intet her, så jeg kæmper - det kode der virker hos mig virker ikke hos mysitesolution ????
Avatar billede olebole Juniormester
25. oktober 2004 - 00:03 #30
Nej, det er zq også svært, når han ikke prøver det, man skriver  :o|
Avatar billede mysitesolution Nybegynder
25. oktober 2004 - 00:04 #31
med bojos kode addet linien oveni sidste linie...
Avatar billede olebole Juniormester
25. oktober 2004 - 00:05 #32
Jeg forstår ikke, hvad du skriver, men denne kode tilføjer en ny linie, præcis som den skal:

function addLine($filename,$text) {
  if( $fp=fopen($filename, "a")) {
      fputs($fp,$text."\n");
      fclose($fp);
  }
}
Avatar billede mysitesolution Nybegynder
25. oktober 2004 - 00:05 #33
JO jeg gør da så ! hvorfor tror du jeg ikke gør det??? har deadline i morgen tidlig, så JO jeg forsøger hvad jeg kan...
Avatar billede mysitesolution Nybegynder
25. oktober 2004 - 00:06 #34
kan det være fordi jeg læser filen? eller at apache læser filen og smider et linieskift ind?
Avatar billede bojo Nybegynder
25. oktober 2004 - 00:06 #35
men iøvrigt siger profiler at tiden bliver brugt på fopen og fclose efterfulgt af $lines = file($filename);
Avatar billede mysitesolution Nybegynder
25. oktober 2004 - 00:06 #36
til at læse filen bruger jeg file()
Avatar billede olebole Juniormester
25. oktober 2004 - 00:07 #37
Du skal slet ikke læse filen ... du skal da bare tilføje en linie!
Avatar billede mysitesolution Nybegynder
25. oktober 2004 - 00:08 #38
jamen jeg snakker andre steder i mit dokument... altså om file() kan lave et linieskift... det er ikke ngoet med delete og add...
Avatar billede mysitesolution Nybegynder
25. oktober 2004 - 00:09 #39
bojos kode puttede at teksten oveni den anden :/ ved ikke hvorfor?
Avatar billede mysitesolution Nybegynder
25. oktober 2004 - 00:09 #40
vil i have hele mit dokument?
Avatar billede olebole Juniormester
25. oktober 2004 - 00:11 #41
Jeg tror, du skal kikke lidt på, hvordan man bruger filsystemet og skriver/læser filer under PHP på www.php.net ... jeg giver op her.

PS: file() er en dræbende langsom funktion, da den er binary-safe. Da du ingen brug har for det, er der garanteret bedre funktioner.
Avatar billede mysitesolution Nybegynder
25. oktober 2004 - 00:14 #42
kan give jer hele mit dokument, så kan i se om der er en anden fejl?
Avatar billede mysitesolution Nybegynder
25. oktober 2004 - 00:19 #43
kan fortælle jer at det virker nu :)
Avatar billede mysitesolution Nybegynder
25. oktober 2004 - 00:20 #44
man skulle NETOP lave et linieskift i filen... så... olebole, lad vær med at være så "sur" noget...når du modsagde mit resultat
Avatar billede bojo Nybegynder
25. oktober 2004 - 00:22 #45
godt det virker :-)
Avatar billede mysitesolution Nybegynder
25. oktober 2004 - 00:24 #46
jep.. bojo opret svar :) bruger din kode ( dog ikke slet koden, da den ikke virker, eller dvs. det nok bare er et $number + 1 eller - 1 man skal lave )
Avatar billede bojo Nybegynder
25. oktober 2004 - 00:26 #47
nej tak :-)
Avatar billede mysitesolution Nybegynder
25. oktober 2004 - 00:27 #48
hvorfor dog? bruger trols alt din kode? hvad så med halvdelen...

Du har da fortjent, bare for at hører på mig ;)
Avatar billede olebole Juniormester
25. oktober 2004 - 01:20 #49
Ja, naturligvis skal man lave et lineskift ... ellers skriver man det hele på én lang linie. Det siger jo sig selv - og det har jeg aldrig benægtet  :)

Tværtimod har jeg sagt, at dette:

function addLine($filename,$text) {
  if( $fp=fopen($filename, "a")) {
      fputs($fp,$text."\n");
      fclose($fp);
  }
}

er måden at gøre det på - og den sætter netop et linieskift i slutningen, præcis som den skal. At du så fik ekstra linieskift, kunne kun handle om, at du selv introducerede det ... enten ved at indsætte det via den streng, du indatte, eller ved at lukke dokumentet op i en editor. Det skrev jeg for 36 (seksogtredive ...!) indlæg siden.
At du skifter 'a' ud med 'w', viser du bør læse lidt om PHP's fil-funktioner.

Desuden blev jeg ikke det fjerneste sur. Jeg kender blot måder, jeg hellere vil spilde tid på  :)
Avatar billede bojo Nybegynder
25. oktober 2004 - 01:23 #50
mysitesolution < jeg samler ikke på points, jeg er bare en PHP begynder der gerne vil lære mere og finder dette en god måde.
Avatar billede mysitesolution Nybegynder
25. oktober 2004 - 08:20 #51
"Alternativt, skal du bare sikre dig, at der ikke er en tom, blank linie i bunden af dokumentet, før du save'er og upload'er. Det er nemlig derved, problemet opstår." <- hmm ;)
Avatar billede mysitesolution Nybegynder
25. oktober 2004 - 08:21 #52
okay, skal du da have lov til :)
Avatar billede bojo Nybegynder
30. oktober 2004 - 11:56 #53
men svar lige dig selv så "sagen" forsvinder :-)
Avatar billede mysitesolution Nybegynder
27. november 2005 - 00:32 #54
svar, sorry så lang tid :/
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