Anzeige:
Ergebnis 1 bis 7 von 7

Thema: hexwertfolge komplett ändern

  1. #1
    Registrierter Benutzer
    Registriert seit
    11.10.2005
    Beiträge
    8

    hexwertfolge komplett ändern

    Hallo,
    ich hatte diese Frage schon mal nur auf sed bezogen gestellt leider geht das damit nicht.
    Deshalb hier nochmal die Frage ob jemand weiß ob das mit perl, php oder.. funktionieren kann.
    Folgendes Problem habe ich
    In Dateien die ich verarbeiten muß ist folgende HEX-ZEICHENFOLGE enthalten
    3f0a27 und sollen nach 3f270a geändert werden.
    Falls jemand ein Tipp hat Danke

  2. #2
    Registrierter Benutzer Avatar von Molaf
    Registriert seit
    15.11.2004
    Beiträge
    127
    Code:
    #!/usr/bin/perl
    use byte;
    
    open (DATEI,"<$dateiname")
    @zeilen=<DATEI>;
    close (DATEI);
    
    open (DATEI,">$dateiname")
    foreach (@zeilen)
       { s/\x3f\x0a\x27/\x3f\x27\x0a/g; 
       print DATEI; }
    close (DATEI);
    ;
    Ungetestet, aber so müsste es gehen.
    Wenn die Dateien mehrere MB gross sind, sollte man besser Zeile für Zeile testen, nicht wie hier alles erst in den Speicher holen.

    Und das Problem lässt sich nicht mit sed lösen?

  3. #3
    Registrierter Benutzer
    Registriert seit
    11.10.2005
    Beiträge
    8
    Danke werde ich ausprobieren.
    Beim SED ist das Problem der der nicht die Hexwerte erkennt sondern nur den Text in der Datei und der ist leider ?(zeilenumbruch)' und das konnte ich nicht abfragen.
    Wobei ich mir nicht ganz sicher bin ob das nicht doch gehen könnte
    sed "s/?\n'/?'\n/g" ging nicht
    Gruß

  4. #4
    Registrierter Benutzer
    Registriert seit
    02.09.2004
    Ort
    Mannheim
    Beiträge
    102
    Geht das jetzt?
    Würde mich wundern, weil der 0a ja Zeilentrenner ist, d.h. beim zeilenweise verarbeiten niemals das Zeichen nach dem Zeilentrenner im Patternspace ist.
    Bei sed ist das ziemlich nervig, da kann man wohl manuell die Pufferkontrolle übernehmen, aber das ist komplizierter, als ein kleines C-Programm zu schreiben.
    Angeblich gibt es für sed einen Multiline-Modus, ich habe es mit meinem GNU sed noch nciht geschafft, Patterns über mehrere Zeilen hinweg zu adressieren.
    Für Perl habe ich mal ein MIniskript gebaut, welches immer eine Zeile hinzuliest und dann mit der Doppelzeile nach Patterns sucht (eigentlich arbeitet es mit einem Doppel-Pattern <zeilenende>/n<zeilenanfang>).
    Greetz
    Thomas
    Code:
    #!/usr/bin/perl
    
    #$z_end = "ende";
    #$z_anf = "anfang";
    #$new_end ="EEEE";
    #$new_anf = "AAAA";
    
    if (@ARGV <2) { die "Es werden 2 Paramter benoetigt: ende#anfang und endeneu#anfangneu!\n"; }
    
    @finde = split /#/, $ARGV[0];
    @ersetze = split /#/, $ARGV[1];
    print "Finde: @finde, ersetze: @ersetze\n";
    
    $lin2="";
    while (<STDIN>) {
    	$lin1 = $lin2;
    	$lin2 = $_;
    	if (($lin1 =~ /($finde[0])$/) and ($lin2 =~ /^($finde[1])/)) {
    		  $lin1 =~ s/($finde[0])$/$ersetze[0]/;
    		  chomp ($lin1);
    		  $lin2 =~ s/^($finde[1])/$ersetze[1]/;	
    	}
    	print $lin1;
    }
    Geändert von tschloss (08-12-2005 um 10:45 Uhr)

  5. #5
    Registrierter Benutzer
    Registriert seit
    26.12.2002
    Ort
    Matrix
    Beiträge
    194
    Zitat Zitat von moorole
    In Dateien die ich verarbeiten muß ist folgende HEX-ZEICHENFOLGE enthalten
    3f0a27 und sollen nach 3f270a geändert werden.
    Falls jemand ein Tipp hat Danke
    sed 's/\x0a\x3f\x27/\x27\x3f\0a/g' file


    -j

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    @Jasper: \x0a ist Linefeed, und sed ist zeilenbasiert.

  7. #7
    Registrierter Benutzer
    Registriert seit
    26.12.2002
    Ort
    Matrix
    Beiträge
    194
    auch wieder wahr. asche auf mein haupt.

    -j

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •