strings finden und ausgeben

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
C167
Beiträge: 468
Registriert: 06.04.2006 08:55:20
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

strings finden und ausgeben

Beitrag von C167 » 26.06.2008 11:46:15

Tagchen,
ich hab hier ein paar Dateien, die Strings nach dem folgenden Muster enthalten:

Code: Alles auswählen

{L_irgendwelche_zeichen}
mir geht es jetzt darum, diese Zeichen in eine Datei zu ballern oder zuallererst mal auszugeben. Es sind nur normale Zeichen und Zahlen drin, also [a-zA-Z0-9_]
Hintergrund: Ich brauche eine Beispieldatei fuer das Uebersetzungssystem vom phpbb3. Dort sind alle Texte naemlich wie oben gezeigt angegeben, die scripte ziehen das raus, entfernen das L_ und schauen dann in arrays nach. Ich moechte so was aenliches jetzt mit C++/Qt schreiben.
Die Datei dafuer sieht dann z.b. so aus:

Code: Alles auswählen

QT_TRANSLATE_NOOP("dateiname.html", "irgenwelchezeichen");
wobei es ncihts macht, wenn das L_ vorne dran ist.

Also, momentan stecke ich bei sed fest, weil ich den syntax nicht ganz kapiere. Wenn ich den Befehl hab um die liste anzuzeigen, kann ich die liste per bash-script mit dem QT_TRANSLATE_NOOP... verheiraten.
Bis jetzt hab ich versucht den sed-befehl von hier zu verwenden, aber das ist meine erste Beruehrung mit sed :-)
Hab mir auch schon ueberlegt das ganze mit perl zu versuchen, aber wegen ein paar beispieldateien ein perl-script zu schreiben?
C167
GOD is REAL, unless declared INTEGER

uname
Beiträge: 12427
Registriert: 03.06.2008 09:33:02

Re: strings finden und ausgeben

Beitrag von uname » 26.06.2008 12:50:20

Hab mir auch schon ueberlegt das ganze mit perl zu versuchen, aber wegen ein paar beispieldateien ein perl-script zu schreiben?
Ich für meinen Fall schreibe meistens für sowas auch Perl-Scripte, obwohl es meist auch mit einem sed-Einzeiler geht. Das liegt daran, dass ich sowohl "sed" nicht wirklich verstehe und vor allem daran, dass ich gerne Perl-Hashes für alle möglichen Dinge nutze.

C167
Beiträge: 468
Registriert: 06.04.2006 08:55:20
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Re: strings finden und ausgeben

Beitrag von C167 » 26.06.2008 13:47:21

naja mit perl fang ich halt auch erst mehr oder weniger an ;) makefiles anhand von Doxygen-tags schreiben bekomm ich nach einigem hin- und her auch hin ;)
Bin inzwischen bei folgender Zeile angelangt:

Code: Alles auswählen

sed -ne 's/^.*\({L_[A-Za-z0-9_]}\);.*$/\1/p' file.html
aber das gibt nix aus, ich denke wegen der "{" und "}"

€dit: inzwischen hab ich rausgefunden wie das phpbb3 das macht (file: includes/functions_template.php:256)

Code: Alles auswählen

$text_blocks = preg_replace('#\{L_(a-z0-9\-_]*)\}#is', .......
GOD is REAL, unless declared INTEGER

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Re: strings finden und ausgeben

Beitrag von Spasswolf » 26.06.2008 16:44:13

Schon strings probiert?

C167
Beiträge: 468
Registriert: 06.04.2006 08:55:20
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Re: strings finden und ausgeben

Beitrag von C167 » 26.06.2008 17:11:52

ich hab hier keine binaerdaten, sondern normale textdateien. sonst wuerde ich ja nicht mit sed und perl versuchen and Ziel zu kommen
GOD is REAL, unless declared INTEGER

Benutzeravatar
Sid Burn
Beiträge: 47
Registriert: 16.11.2006 15:18:02
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: /universe/earth/europe/germany/nrw/essen
Kontaktdaten:

Re: strings finden und ausgeben

Beitrag von Sid Burn » 27.06.2008 00:09:20

Eine kleine Beispieldatei wäre nicht schlecht. Ansonsten schreibst du nirgends ob ein vollständiger Tag auch immer in einer Zeile vorkommt. Oder kann dieser auch auf mehreren Zeilen aufgeteilt sein? Ist jede Zeile ein einzeilner Tag? u.s.w.

Ein kleines Beispiel das davon ausgeht das ein solches schnipsel immer komplett auf einer Zeile vorkommt und auch mehrerer Solcher sachen auf einer Zeile vorkommen können:

Code: Alles auswählen

#!/usr/bin/perl
# Core Module
use strict;
use warnings;
use utf8;
use open ':utf8';
use open ':std';
use Carp qw(carp croak);
use Fatal qw(open close);
use IO::Handle;
use English '-no-match-vars';
# CPAN Module
#use Smart::Comments;

while ( my $line = <DATA> ) {
    print join("\n", $line =~ m/ \{ L_ (\w+?) \} /xmsg), "\n";
}

__DATA__
{L_irgendwelche_zeichen} {L_lkjsafdnlkjn}
{L_hallo234welt_sadf}
Das ganze gibt dir nur alles hinter "L_" jeweils auf einer Zeile aus.

Antworten