Schrift
[thread]11525[/thread]

Probleme mit komplexem Sachverhalt



<< >> 6 Einträge, 1 Seite
RPerl
 2008-03-26 19:18
#107511 #107511
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Hallo Jungs,
Hallo Maedels,

ich hab mal wieder eine Frage bzgl. Perl. Diesmal leider etwas (deutlich) komplexer.
Es sieht so aus:

Ich habe 1 Array mit Nummern. Beispiel:

1. 36473921
2. 462283
3. 19793929
[...]

Dann habe ich 1 Hash, der als Schluessel, die Nummern aus dem Array enthaelt. Beispiel:

36473921=> Peter
462283 => Franz
19793929 => Guido

Jetzt habe ich eine Datei, die so einen String enthaelt:

Code: (dl )
<plugin-data-field key="displayName" >36473921</plugin-data-field>


Nun moechte ich in der gesamten Datei die Strings tauschen durch:

Code: (dl )
<plugin-data-field key="displayName" >$hash{'36473921'}</plugin-data-field>


In dem Beispiel oben, also "Peter" anstelle von der Nummer anzeigen. Irgendwie ist meine Loesung nicht lauffaehig. Ich weiss nicht warum.
Folgendes ist meine (nicht lauffaehige) Loesung:

Code (perl): (dl )
1
2
3
4
5
6
7
8
  # loop over all icq numbers
    foreach my $icq_number (@{$icq_numbers}) {
       # loop over all lines
       foreach my $line (@raw_file_content) {
          ($line = $line) =~ s!<plugin-data-field key="displayName" >$icq_number</plugin-data-field>!<plugin-data-field key="displayName" >$username_icq->{$icq_number}</plugin-data-field>!;
          print $line;
       }
    }


@raw_file_content enthaelt die Datei. Auch die Zeilen die ich bearbeiten muss.
@icq_numbers enhaelt die Nummern.
%username_icq enthaelt die Zuordnungen von Nummer => Name

Wenn ich meinen code starte, bekomme ich eine viel groessere Datei die allen anschein nach doppelte Zeilen hat. Also muss wohl irgendwas nicht stimmen.
ich hoffe ich konnte mein Problem ausreichend beschreiben, es ist sehr komplex.

Wenn jemand etwas Zeit und Lust hat, kann derjenige / diejenige ja mal kurz reinschauen und mir helfen.

Ich bedanke mich fuer's Lesen und wuensche einen angenehmen Abend!

Gruss
rperl
Gast Gast
 2008-03-26 19:48
#107513 #107513
Code (perl): (dl )
1
2
3
4
foreach my $line (@raw_file_content) {
  ($line = $line) =~ s!(?<=<plugin-data-field key="displayName")(\d+)(?=</plugin-data-field>)!$username_icq->{$1}!e;
  print $line;
}
RPerl
 2008-03-26 20:19
#107517 #107517
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Klappt bei mir nicht.
Vielleicht fehlt die ">" und Zeile #2 muesste so sein:

($line = $line) =~ s!(?<=<plugin-data-field key="displayName") >(\d+)(?=</plugin-data-field>)!$username_icq->{$1}!e;

Gast Gast
 2008-03-26 20:26
#107519 #107519
besser so:
Code (perl): (dl )
$line =~ s!(?<=<plugin-data-field key="displayName"\s*>\s*)(\d+)(?=\s*</plugin-data-field\s*>)!$username_icq->{$1}!e;
Gast Gast
 2008-03-26 20:27
#107520 #107520
arg fehler...
Code (perl): (dl )
$line =~ s!(?<=<plugin-data-field key="displayName" >)(\d+)(?=</plugin-data-field>)!$username_icq->{$1}!e;
Dubu
 2008-04-27 15:42
#108909 #108909
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[alten Thread ausgrab]
Wenn %username_icq der Hash ist, dann muss es heißen $username_icq{$1} und nicht $username_icq->{$1}.
<< >> 6 Einträge, 1 Seite



View all threads created 2008-03-26 19:18.