Toon posts:

[PERL] Problemen met linebreaks*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allemaal,

Sorry, kan niks hierover vinden in het forum. Dus vandaar deze post.

Middels een php script schrijf ik gegevens naar een plain text file. Stukje uit de code (bepaalde zaken zoals foutcontrole en openen file is weggelaten):
code:
1
2
3
4
$writetofile = "[".$command."]\r\n";
$writetofile .= "id=".$id."\r\n";
$writetofile .= "adminname=".$adminname."\r\n";
fwrite($fp,$writetofile);

In het bestand komt dan o.a. te staan:
code:
1
2
3
[action]
id=00001
adminname=Name

Het bestand wordt daarna gekopieerd naar een andere folder. Een programma geschreven in Perl moet daarna dit bestand uitlezen.

Een stukje uit de code daarvan:
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
  if(open($Inf, "commands.cfg"))
  {
    while(<$Inf>)
    {
      chomp;
      
      #Strip comments
      s/^([^\#]*)\#.*$/$1/;
      
      #Ignore blank lines
      if(/\S/)
      {
        if(/^\s*\\[([^\]]+)\]\s*$/)
        {
          #It's a [] category
...
        }
        elsif(/^\s*([^\s\=]+)\s*\=\s*(.*)\s*$/)
        {
          #It's an assignment
...
        }
      }
    }
    close($Inf);
  }

Het lezen van de file is mogelijk en daar ontstaat ook geen fout op.
Het probleem is echter, dat alle data die rechts van een = teken staat het teken ^M op het einde heeft.
Dus:
- action wordt goed gelezen
- id wordt goed gelezen
- 00001 wordt gelezen als 00001^M
- adminname wordt goed gelezen
- Name wordt gelezen als Name^M

Nu snap ik niet waar dit door komt. Ik kan nergens een fout vinden.

Als iemand weet wat ik fout doe, dan graag.
Heb al geprobeerd met een "string replace" dit probleem op te lossen, maar dit lukt me niet.

Alvast bedankt.

Greetz,
Geer

  • Rac-On
  • Registratie: November 2003
  • Niet online
het /r/n vs ^m probleem heeft te maken met het type "enter" dat je gebruikt. probeer de \r\n eens te vervangen door alleen een \r of alleen een \n (in je php script dus). Daarnaast, heel belangrijk voor een "enter" probleem: draai je het geheel op windows of linux?

offtopic:
vraag even een topic report aan voor een titelchange naar een titel met wat meer inhoud "[perl] problemen met linebreak" oid

doet niet aan icons, usertitels of signatures


  • Gertjan
  • Registratie: Oktober 2001
  • Laatst online: 07-02 20:23

Gertjan

mmmm, beer...

Ik vermoed dat het komt doordat je in de php-code bij het wegschrijven windows-regeleinden gebruikt: \r\n. Als je die allemaal vervangt door unix-regeleinden, \n, gaat het wel goed. Indien je die code niet kunt veranderen zul je in je perl-script de reguliere expressies moeten veranderen zodat ze \r\n herkennen.

[ Voor 3% gewijzigd door Gertjan op 02-07-2005 19:19 ]


Verwijderd

Topicstarter
Hartelijke dank voor jullie reacties.

Het probleem schijnt opgelost te zijn. Ipv \r\n gebruik ik nu \n in de php code. En daarmee kan het perl programma probleemloos overweg. Geen ^M meer.

Beiden nogmaals hartelijke dank voor de hulp.

Greetz,
Geer