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