[PHP] ascii code/stuurcode einde regel in bestand

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

Onderwerpen


Acties:
  • 0 Henk 'm!

  • _Rayman_
  • Registratie: November 2001
  • Laatst online: 29-08-2023

_Rayman_

Verwacht het onverwachte.

Topicstarter
Om een beetje wegwijs te worden in php, apache, mysql, ect ben ik ben bezig met een kassasysteem (om boeken te verkopen). Dit ging allemaal naar wens, maar nu heb ik toch een probleem.
Nu ben ik bezig met het automatisch genereren van een bestelling in php (m.b.v. dreamweaver MX). De bestelling word dan weer ingelezen in een volgend pakket (esperanto => EDI). Dit pakket verwacht alles op de juiste plek in een bestand anders verstuurd het niks.

Het probleem is het volgende:
Als php een bestelling genereert zet het telkens aan het einde van een regel (soms ook in een regel) iets van een stuurcode neer. Deze code is niet tezien in b.v. notepad maar wel in edit(esperanto ziet het ook, en geeft dus een fout). Als ik deze codes weghaal in edit dan pakt esperanto het bestand wel op.
Eerst dacht ik dat het ascii code 13 was (een enter). Dus met behulp van het commando ltrim proberen het eruit te filteren, maar tervergeefs. Ook als ik niets meegaf aan het commando ltrim om te filteren (dan filtert het alle stuurcodes) werd er niets gefilterd.

Om het wat duidelijker te maken, hier een paar screenshots van de uitvoer van het php gedeelte (clickable):

Goed:
Afbeeldingslocatie: http://home.tiscali.nl/dennis2925/goed.gif

Fout:
Het gaat om dat muzieknoot teken.
Afbeeldingslocatie: http://home.tiscali.nl/dennis2925/fout.gif

Php bestand in edit:
Afbeeldingslocatie: http://home.tiscali.nl/dennis2925/php.gif

Code van het stukje php dat het bestand aanmaakt:
code:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
$fp = fopen("C:bestel.sor", "w");
$id++;
$ISBN++;
$inhoud = "[ESPERANTO_ENVELOPE_O01]DEMO_PC  DEMO_DC    02 OWN_PC       OWN_DC
ORDER

Van : Boeken Winkel
      Hendrik de Koenelaan 28
      Willemstad

Aan : Groothandel
      Akkers 17
      Varkensdorp

Betreft: Bestelling Boeken.
Ordernr: 342

Artikelnr Omschrijving                        Aantal  Prijs  Totaal
0--------1---------2---------3---------4---------5---------6----------
1234567890123456789012345678901234567890123456789012345678901234567890

11111     ".$ISBN."                        ".$Aantal."       3.10   3.10
          (Boek bestelling)
22222     ".$ISBN."                        ".$Aantal."       1.25   2.50
          (krop ca. 400gr.)   
33333     ".$ISBN."                        ".$Aantal."       0.95   2.85
          (stuk ca. 500gr.)
33335     ".$ISBN."                        ".$Aantal."       1.30   3.25
          (heel ca. 750gr.)
44444     ".$ISBN."                       40       1.50  60.00
          (1.5 liter fles)

-------------------------------------------------------------------
Totaal excl. BTW                                             71.70
BTW 17.5%                                                    12.55
-------------------------------------------------------------------
Totaal incl. BTW                                             84.25
-------------------------------------------------------------------

Datum: 2004-12-28  15:54




"; 

fwrite($fp, $inhoud); 
fclose($fp);
echo "Bestelling is geplaatst.";


Nu is mijn vraag, wie weet wat voor teken het is en hoe ik het weg kan krijgen.
Ik heb gezocht op google en op de GoT maar niets gevonden wat werkte.

[ Voor 8% gewijzigd door _Rayman_ op 02-01-2004 16:02 ]


Acties:
  • 0 Henk 'm!

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 21-09 14:16

Super_ik

haklust!

tis waarschijnlijk iets wat jou editor gebruikt om om naar de volgende regel te gaan, als je je php file in edit opent zul je ze denk ook wel zien staan, probeer \r\n ofzote gebruiken :)

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


Acties:
  • 0 Henk 'm!

  • Tycoontje
  • Registratie: Februari 2003
  • Laatst online: 15-07 12:59
Ligt inderdaad aan je editor, die aan het eind van elke regel een carriage return+line feed (\r\n) zet, in plaats van alleen de line feed die je wilt.

Mogelijke oplossingen lijken mij:
1. Een editor gebruiken die dit niet doet. Over het algemeen doen windows editors het niet zoals je wilt en unix editors wel. Misschien is dit een optie?

2. Zelf je returns regelen en niet de editor laten doen. Dan wordt het iets als:
code:
1
$inhoud = "[ESPERANTO_ENVELOPE_O01]DEMO_PC  DEMO_DC    02 OWN_PC       OWN_DC\nORDER\n\n
etcetera..
Of misschien wat overzichtelijker:
code:
1
2
3
$inhoud = "[ESPERANTO_ENVELOPE_O01]DEMO_PC  DEMO_DC    02 OWN_PC       OWN_DC\n".
"ORDER\n".
"\n".
etcetera..

M.a.w. de returns van je editor buiten de string houden.

3. Volgens mij wilde je een rtrim(), i.p.v. een ltrim(). Die carriage return zit namelijk aan het eind van je regel, niet aan het begin.

[ Voor 14% gewijzigd door Tycoontje op 02-01-2004 21:01 . Reden: Zal de layout niet te veel slopen ]


Acties:
  • 0 Henk 'm!

  • _Rayman_
  • Registratie: November 2001
  • Laatst online: 29-08-2023

_Rayman_

Verwacht het onverwachte.

Topicstarter
Tycoontje schreef op 02 januari 2004 @ 14:47:
Ligt inderdaad aan je editor, die aan het eind van elke regel een carriage return+line feed (rn) zet, in plaats van alleen de line feed die je wilt.

Mogelijke oplossingen lijken mij:
1. Een editor gebruiken die dit niet doet. Over het algemeen doen windows editors het niet zoals je wilt en unix editors wel. Misschien is dit een optie?

2. Zelf je returns regelen en niet de editor laten doen. Dan wordt het iets als:
code:
1
$inhoud = "[ESPERANTO_ENVELOPE_O01]DEMO_PC  DEMO_DC 02 OWN_PC OWN_DCnORDERnn
etcetera..
Of misschien wat overzichtelijker:
code:
1
2
3
$inhoud = "[ESPERANTO_ENVELOPE_O01]DEMO_PC  DEMO_DC 02 OWN_PC   OWN_DCn".
"ORDERn".
"n".
etcetera..

M.a.w. de returns van je editor buiten de string houden.

3. Volgens mij wilde je een rtrim(), i.p.v. een ltrim(). Die carriage return zit namelijk aan het eind van je regel, niet aan het begin.
Bedankt voor je reactie, ik heb het allemaal eens uitgeprobeerd, maar werken doet het helaas niet.
De eerste optie is geen optie voor mij, ik ben alleen bekend in dreamweaver. Maar ik begrijp het niet, want hij zet dan een r in een string?
Die 2e optie die je gaf kan niet, want je maakt telkens dan een korte string. Hij pakt dan maar de eerste.
Als je kijkt in de 2e screenshot, staan er ook in de regels het ascii teken.
De 3e optie werkt ook niet :'(, er gebeurd namelijk helemaal niets.
:'(

Wat voor editor bedoel je dan?
Super_ik schreef op 02 januari 2004 @ 14:17:
tis waarschijnlijk iets wat jou editor gebruikt om om naar de volgende regel te gaan, als je je php file in edit opent zul je ze denk ook wel zien staan, probeer rn ofzote gebruiken :)
Ik heb het betreffende php file geopend in edit, maar daar staan geen stuurcodes in.

[ Voor 16% gewijzigd door _Rayman_ op 02-01-2004 15:53 ]


Acties:
  • 0 Henk 'm!

  • Tycoontje
  • Registratie: Februari 2003
  • Laatst online: 15-07 12:59
Dennis2925 schreef op 02 januari 2004 @ 15:51:
[...]


Bedankt voor je reactie, ik heb het allemaal eens uitgeprobeerd, maar werken doet het helaas niet.
De eerste optie is geen optie voor mij, ik ben alleen bekend in dreamweaver. Maar ik begrijp het niet, want hij zet dan een r in een string?
Je variabele "inhoud" is 1 doorlopende string. Aan het eind van de regel heb jij op je enter toets gedrukt. Daarmee zet jouw editor, in dit geval dus Dreamweaver, er een carriage return en een line feed in (ascii code 13 en 10, ook wel bekend als escaped characters \r en \n). Op deze manier worden die codes dus onderdeel van de string. Dat moet je zien te voorkomen. De oplossingen die ik daarom noemde waren: 1. Een editor gebruiken die alleen de line feed plaatst en dus niet de carriage return. 2. Aan het eind van de regel niet gebruik maken van de returns die je editor plaats, maar deze buiten de string houden en zelf je returns regelen die in de output moeten komen. 3. Naderhand de carriage return eruit filteren.
Die 2e optie die je gaf kan niet, want je maakt telkens dan een korte string. Hij pakt dan maar de eerste.
Dan ben je waarschijnlijk de punten aan het eind vergeten om de regels te concatenaten naar 1 string.
Als je kijkt in de 2e screenshot, staan er ook in de regels het ascii teken.
De 3e optie werkt ook niet :'(, er gebeurd namelijk helemaal niets.
:'(
Edit: Bij nader inzien gaan trim functies niet werken. Die werken alleen maar op begin, eind of begin en eind van een string.

[ Voor 8% gewijzigd door Tycoontje op 02-01-2004 20:58 ]


Acties:
  • 0 Henk 'm!

  • Tycoontje
  • Registratie: Februari 2003
  • Laatst online: 15-07 12:59
Oeps

[ Voor 100% gewijzigd door Tycoontje op 02-01-2004 16:23 . Reden: Dat was geen edit? :) ]


Acties:
  • 0 Henk 'm!

  • IceQb
  • Registratie: Augustus 2002
  • Laatst online: 12-09 09:59
probeer eens de functie trim(); ipv ltrim();

zie ook:
http://nl3.php.net/manual/en/function.trim.php

Acties:
  • 0 Henk 'm!

  • _Rayman_
  • Registratie: November 2001
  • Laatst online: 29-08-2023

_Rayman_

Verwacht het onverwachte.

Topicstarter
Tycoontje schreef op 02 januari 2004 @ 16:20:
[...]

Je variabele "inhoud" is 1 doorlopende string. Aan het eind van de regel heb jij op je enter toets gedrukt. Daarmee zet jouw editor, in dit geval dus Dreamweaver, er een carriage return en een line feed in (ascii code 13 en 10, ook wel bekend als escaped characters \r en \n). Op deze manier worden die codes dus onderdeel van de string. Dat moet je zien te voorkomen. De oplossingen die ik daarom noemde waren: 1. Een editor gebruiken die alleen de line feed plaatst en dus niet de carriage return. 2. Aan het eind van de regel niet gebruik maken van de returns die je editor plaats, maar deze buiten de string houden en zelf je returns regelen die in de output moeten komen. 3. Naderhand de carriage return eruit filteren.
[...]

Dan ben je waarschijnlijk de punten aan het eind vergeten om de regels te concatenaten naar 1 string.

[...]

Edit: Bij nader inzien gaan trim functies niet werken. Die werken alleen maar op begin, eind of begin en eind van een string.
Hartelijk bedankt voor al je geduld. _/-\o_

Ik was dus die puntjes vergeten. |:(
Pagina: 1