linux-l: Formatierer

Manuel Tennert mtennert at meta-systems.de
Do Jun 14 15:39:44 CEST 2001


Also...da hab ich jetzt angefangen so'n kleines Progrämmle zu schreiben
und
sitze jetzt vor einem kleinen Problem:

Quelltext:
#!/usr/bin/perl -w
print "\nZur Ausfuehrung des Programms wird eine Angabe benoetigt:";
print "\nBitte geben Sie die zu formatierende Datei ein: ";
chomp($eingabedatei = <STDIN>);
open INPUT, "<$eingabedatei";
open OUTPUT, ">TEMP.TXT";
while(<INPUT>) {
 $string = $_;
 $string =~ s/¼/\[/g;
 $string =~ s/©/\]/g;
 print OUTPUT $string;
}
close INPUT;
close OUTPUT;
open INPUT, "<TEMP.TXT";
open OUTPUT, ">TEMP2.TXT";
while (<INPUT>) {
 $string = $_;
 if ($string =~ /\[if(.*?)/ ) {
  $i = $1;
  $string =~ s/\[if(.*?)/\n\[if$i/g;
 }
 if ($string =~ /\[\/if\]/ ) {
  $i =$1;
  $string =~ s/\[\/if\]/\n\[\/if\]/g;
 }
 if ($string =~ /\[elif(.*?)/ ) {
  $i =$1;
  $string =~ s/\[elif(.*?)/\n\[elif$i/g;
 }
 if ($string =~ /\[else\]/ ) {
  $string =~ s/\[else\]/\n\[else\]/g;
 }
 print OUTPUT $string;
}
close INPUT;
close OUTPUT;
open INPUT, "<TEMP2.TXT";
open OUTPUT, ">TEST.TXT";
$count = 0;
while (<INPUT>) {
 $string =$_;
 if ($string =~ /\[if(.*?)\]/ ) {
  $count++;
 }
 if (($string =~ /\[if(.*?)\](.*?)/) && ($count = 1) ) {
  $i = $1;
  $j = $2;
  $string =~ s/\[if(.*?)\](.*?)/[if$i]\n\t$j/g;
 }
 if (($string =~ /\[elif(.*?)\](.*?)/) && ($count = 1)) {
  $i = $1;
  $j = $2;
  $string =~ s/\[elif(.*?)\](.*?)/\[elif$i\]\n\t$j/g;
 }
 if (($string =~ /\[else\](.*?)/) && ($count = 1)) {
  $i = $1;
  $string =~ s/\[else\](.*?)/[else]\n\t$i/g;
 }
 if ($string =~ /\[\/if\]/ ) {
  $count--;
 }
# if (($string =~ /\[if(.*?)\](.*?)/) && ($count = 2) ) {
#  $i = $1;
#  $j = $2;
#  $string =~ s/\[if(.*?)\](.*?)/\t\[if$i\]\n\t\t$j/g;
#}

 print OUTPUT $string;
}

Wenn man mal das unten ausgeklammerte betrachtet funktioniert das auch
ganz
gut. Nun nehme man mal an man nehme die ausklammerung mal weg. Nun
passiert
folgendes: Der Counter setzt ja eigentlich immer um 1 hoch, wenn eine
Zeile
die Bedinung [if enthält. Wenn im Quelltext nun 2 Zeilen hintereinander
die
[if-Anweisung steht  so rückt er die erste und zweite if-Anweisung mit
einem
Tab-Zeichen ein. Eigentlich sollte er ja nur die zweite einrücken ! Wo
liegt
denn das Problem, hat jemand einen Tip ???

Manuel



Mehr Informationen über die Mailingliste linux-l