Thread Dynamische Variablen in Perl erstellen? (5 answers)
Opened by chris05133 at 2013-05-09 11:40

guest chris05133
 2013-05-09 11:40
#167468 #167468
Hi. Ich habe aktuell angefangen mit Perl zu arbeiten. Bisher lief das auch relativ problemlos (mal abgesehen davon das ich immer noch bei jedem zweiten Variablen Zugriff das $-Zeichen vergesse. ;( ). Ich verwende für mein Projekt die CEP-Engine Triceps. Um diese mit Daten zu füttern hole ich mir per GET Daten vom Yahoo-Finance Server. Diese liegen im CSV-Format vor. Zuerst splitte ich die Daten anhand des Zeilenumbruchs und anschließend anhand des Kommas. Nun speichere ich die Daten in einer Datenstruktur aus dem Tricepspaket (einer sogenannten Row) und füge sie einer Queue(Paket: Thread::Queue) hinzu. Soweit sogut. Nur wenn ich die Daten dann nach dem hinzufügen wieder aus der Queue hole und z. B. ausgeben will, bekomme ich immer nur das zuletzt hinzugefügt Objekt zurück. Bei den vorigen wird immer nur eine Leerzeile ausgegeben. Die Triceps-Objekte werden korrekt erstellt, das habe anhand eines print-Statements das ich Testweise eingefügt habe überprüft. Es sieht für mich so aus, das das neu zur Queue hinzugefügte Objekte das alte "überschreibt" (evtl. wegen dem gleichen Namen???). Deshalb wäre meine Frage kann ich die Variable in der Schleife irgendwie dynamisch anlegen lassen? Oder gibt es eine Alternative zur Queue wo der gleiche Name egal ist? Hatte bisher leider noch kein Glück dabei eine Lösung zu finden.

Danke im voraus für eure Hilfe. ;)

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
my $queue = Thread::Queue->new();

#Anlegen des RowTypes
our $rtTrade = Triceps::RowType->new(
        symbol       => "string",   #Stock Symbol
        name         => "string",
        currentPrice => "float64",  #aktueller Kurs der Aktie
        highPrice    => "float64",  # höchster Kursstand in den letzten 52 Wochen
        lowPrice     => "float64",  # niedrigtest Kursstand in den letzten 52 Wochen
) or confess "$!";

        #Anlegen einer LWP::UserAgent + anschließende Erstellung und Ausführung des GET-Requests.
        my $ua  = LWP::UserAgent->new;
        my $req = GET 'http://download.finance.yahoo.com/d/quotes.csv?s=YHOO+GOOG+MSFT&f=snl1kj';
        my $res = $ua->request($req);

        #Prüfen der Ergebnisse des GET-Requests + Splittung und Speicherung der Ergebnisse in einem Array.
        my @stockDataArray;
        if ( $res->is_success ) {
                @stockDataArray = split( '\n', $res->content );
        }
        else {
                print $res->status_line . "\n";
        }
        
        my $row;
        #Erstellung der einzelnen Rows aus dem zuvor erstellten Array.
        for ( my $i = 0 ; $i < @stockDataArray; $i++ ) { 
                my @temp = split( ',', $stockDataArray[$i] );
                $row = $rtTrade->makeRowArray( $temp[0], $temp[1], $temp[2], $temp[3],$temp[4] )or die "$!";
                #$row = $rtTrade->makeRowArray(@temp); 
                #print $row->printP() . "\n";  #Erstelltes row-Objekt wird korrekt ausgegeben.
                $queue->enqueue($row); 
        }

for (my $i = 0; $i < 6; $i++) { 
        my $rowBack = $queue->dequeue();
        print $rowBack->printP() . "\n"; 
}

Last edited: 2013-05-09 11:46:52 +0200 (CEST)

View full thread Dynamische Variablen in Perl erstellen?