PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ein Zeichen durch viele ersetzen


ArmerIrrer
22.03.2006, 15:07
Moin Leute,

ich brauch mal kurz hilfe, und zwar brauche ich ein script das mir schnell große dateien durchsucht und dabei ein paar zeichen ersetzt. also dachte ich mir perl wäre die ideale wahl. Leider funzzt es nicht so wie ich mir das gedacht habe. aber hier erst mal das script:


$file = '/home/tt/bee/bee_demo_db/faktura3.sql';

$insertstring = "INSERT INTO `faktura` (`id`, `obchodnik_id`, `zakaznik_id_fakturujici`, `zakaznik_id_odebirajici`, `naklady_doprava`, `datum_id_dodani`, `datum_id_fakturace`, `datum_id_objednani`, `datum_id_platby`) VALUES (";

open(INFO, $file); # File öffnen

while ($lines = <INFO>){ # in Array einlesen

$lines =~ tr/[\(]/$insertstring/;
$lines =~ tr/\)\,/);/;

print INFO $lines;
}
close(INFO);

es soll jede öffnende klammer ("(") durch den $insertstring ersetzt werden, er findet die klammern auch richtig, allerdings wird immer nur ein buchstabe dafür eingesetzr (ein kleines i)
Außerdem soll jedes mal wenn ), auftritt statdessen ); eingesetzt werden. Die anderen auftretenden kommas sollen kommas bleiben. Funktioniert auch, leider ersetzt er die auch die kommas die nicht hinter einer klammer stehen (aber nur mit semikolon)
woran kann das liegen? Jemand ne idee?


eViL_oNe
22.03.2006, 16:30
1. tr ist da auch die falsche Wahl -- versuch's mal mit Regexps:

$lines =~ s/\(/$inserstring/g;

2. auch hier haste mit einem Regexp mehr Chancen als mit einer Zeichenweisen Ersetzung:

$line =~ s/\),/);/g;

ArmerIrrer
23.03.2006, 08:59
Danke für die schnelle antwort, hat mir geholfen auch wenn ich mir für den fehler in den fuß gebissen habe!!!