Suchmuster in Datei suchen und direkt ersetzen

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von Tamidor, 19.04.2006.

  1. #1 Tamidor, 19.04.2006
    Tamidor

    Tamidor Jungspund

    Dabei seit:
    18.04.2006
    Beiträge:
    12
    Zustimmungen:
    0
    Ich würde gerne folgendes machen: ich suche in einer Datei nach einem Zahlenwert und addiere z.b 0.2 hinzu. Der neue Wert soll dann den alten in der Datei ersetzen.

    Beispiel:

    baasdfasdgf
    4.234
    asdfasdf

    soll zu:
    baasdfasdgf
    4.434
    asdfasdf

    werden.

    So geht es nicht, da die Datei dann als leere Datei geöffnet wird :hilfe2:

    open (FOUT,">$INPUT");
    }
    while ( $zeile = <FOUT> )
    {
    if ($zeile =~ /^(\d+\.\d+)/)
    {
    $num = $1;
    $num = $num+0.1;
    print FOUT $num, "\n";
    last;
    }
    }
    close (FOUT);
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Ich weiss nicht, ob perl ersetzen in der Datei unterstuetzt.
    Ansonsten schreibst Du alles aus der alten in eine neue Datei (als zu dem if noch ein else) und benennst sie am Ende um.
     
  4. #3 supersucker, 19.04.2006
    Zuletzt bearbeitet: 19.04.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    hat nix mit deinem problem zu tun aber:

    wenn dir für deine nächsten perl-geschichten viel ärger und kopfzerbrechen ersparen willst schreibst du

    Code:
    use strict;
    use warning;
    
    an den anfang jedes perl-scriptes und deklarierst deine variablen vernünftig.

    Code:
    perldoc -f my
    Code:
    perldoc -f our
    Code:
    perldoc -f local
    sagt dir wie.

    edit:

    hatte ganz vergessen:

    du kannst mit perl auch direkt in eine datei schreiben die du geöffnet hast, allerdings geht das nicht über das filehandle so wie du es machst.
    glaube ich zumindest.
    wenn nicht schreib es halt in eine neue datei wie mein vorredner schon angemerkt hat.
     
  5. hehejo

    hehejo blöder Purist

    Dabei seit:
    12.10.2003
    Beiträge:
    1.280
    Zustimmungen:
    0
    Ort:
    Stein (Mittelfranken)
  6. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Wie rechnet sed denn mit Gleitkommazahlen? Habe in der man-page dazu nichts gefunden. Oder schlaegst Du vor, mittels regulaerer Ausdruecke einen Rechner zu implementieren?
     
  7. #6 Tamidor, 19.04.2006
    Zuletzt bearbeitet: 19.04.2006
    Tamidor

    Tamidor Jungspund

    Dabei seit:
    18.04.2006
    Beiträge:
    12
    Zustimmungen:
    0
    Erst mal Danke für Eure Antworten.

    Meine Variablen hab ich am Anfang schon ordentlich deklariert, aber da das zur Problembeschreibung nicht erforderlich ist, hab ich es nicht mit reingepastet. :brav:

    Ich hätte auch gerne einfach sed verwendet, aber ich habe auch keine Möglichkeit gefunden damit Rechenoperationen durchzuführen. :think:
     
  8. hehejo

    hehejo blöder Purist

    Dabei seit:
    12.10.2003
    Beiträge:
    1.280
    Zustimmungen:
    0
    Ort:
    Stein (Mittelfranken)
    Hrm, nun gut. An den Rechenoperationen ist was dran.
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 Wolfgang, 19.04.2006
    Zuletzt bearbeitet: 19.04.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Zunächst kann sed nicht rechnen, sondern sowas geht nur sehr umständlich.
    Auch kennt nicht jedes sed die Option -i.

    Mit perl geht sowas aber sehr leicht zu machen.
    Direkt als Einzeiler:
    Die Datei sei daten
    Code:
    $ cat daten:
    baasdfasdgf
    4.234
    asdfasdf
    
    $ perl -pi"bak" -e '(/^([0-9,.]+)$/)?$_=sprintf "%-4.3f\n",$1+0.5:$_' daten
    $ cat daten
    baasdfasdgf
    4.734
    asdfasdf
    # Der geht auch:
    $ perl -pi"bak" -e '(/^([0-9,.]+)$/)?s/^(.*)$/sprintf "%-4.3f",$1+0.5/eg:1' daten
    
    Dabei wird eine Kopie mit der Endung bak angelegt , und wie zu sehen die datei direkt editiert.

    HTH
    Gruß Wolfgang
    PS Das Format von printf musst du anpassen.
     
  11. #9 Wolfgang, 19.04.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Um es noch perfekter zu machen, so dass auch bei zwei Ziffern nur mit der ersten gerechnet wird, ist Folgendes besser. Auch darf hier nur ein Punkt in der Ziffer vorkommen.

    Code:
     
    $ cat daten
    [i]baasdfasdgf
    4.234
    asdfasdf
    4.234 20.500
    [/i]
    $ perl -pi"bak" -e '(/^([0-9,.]+)/)?s/^(\d+[.]{1}\d+)+?/sprintf "%-4.3f %s",($1+0.5)/eg:1' daten
    $ cat daten
    [i]
    baasdfasdgf
    4.734 
    asdfasdf
    4.734  20.500[/i]
    
    Hier sind natürlich sogar noch etliche Zeichen einzusparen, aber ich will ja den Sinn erkennbar lassen. :devil:

    Die Option e beim Replace, gestattet es unter perl, ausführbaren Code im Ersetzen Teil einzufügen.
    Hier geradezu ideal anwendbar. ;)
    Ansonsten hilft
    perldoc perlrun

    Gruß Wolfgang
     
Thema: Suchmuster in Datei suchen und direkt ersetzen
Besucher kamen mit folgenden Suchen
  1. perl datei durchsuchen rsetzen

Die Seite wird geladen...

Suchmuster in Datei suchen und direkt ersetzen - Ähnliche Themen

  1. User sollen Dateien speichern und ändern, aber nicht neu anlegen dürfen

    User sollen Dateien speichern und ändern, aber nicht neu anlegen dürfen: Hallo liebe Helfer, welche Einstellungen muss ich in der smb.conf bzw. unter Linux vornehmen, damit User vorhandene Dateien öffnen und speichern...
  2. Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen...

    Suche in Datei doppelte Wörter in jeder Zeile bis zum dritten Leerzeichen...: Ich habe eine Textdatei in der ich Einträge bis zum 3. Leerzeichen mit den restlichen Zeilen (auch nur bis 3. Leerzeichen) vergleichen muss und...
  3. Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen

    Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen: Hallo, ich habe ein Verzeichnis, darin enthalten sind mehrere Dateien. Nun möchte ich alle Dateien (Parameter $1) gegen eine konstante Datei...
  4. Dateiinhalte vergleichen - Neue Sätze dann ausgeben

    Dateiinhalte vergleichen - Neue Sätze dann ausgeben: Liebe Forumsmitglieder, ich benöte mal wieder Eure Hilfe: Ich möchte 2 Dateien vergleichen. Datei-1 hat z.B. 100 Datensätze mit mehreren Feldern...
  5. Dateien selektieren und zählen

    Dateien selektieren und zählen: Hallo, das ist mein erster Beitrag, bitte entschuldigt, falls nicht alles richtig geschrieben ist. Ich muss meine erste Hausaufgabe als...