Ergebnis 1 bis 3 von 3

Thema: Variable nach Schleife weiterbenutzen (PERL)

  1. #1
    Unregistriert
    Gast

    Standard Variable nach Schleife weiterbenutzen (PERL)

    Hi,

    ich habe folgendes PERL-Problem, ich möchte in einer IF Anweisung einen bestimmten Wert auslesen, und diesen nach Beenden der IF Anweisung noch im Code weiterbenutzen.

    Code:
           if (Bedingung)
           {
            CODE
    
            $Z =~ m/^\((.*)\)$/;
            $ZEICHEN = $1;
           }
    
    Bla
    Bla
    Bla
    
    Ganz viel Code
    
    $sql_string = ("CREATE TABLE TABELLE1 (AAA char($ZEICHEN), BBB char($ZEICHEN))");
    In meinem SQL_String brauche ich nun den Wert den ich in der IF Anweisung ausgelesen habe, ich bekomme aber immer diese Warnmeldung:

    Use of uninitialized value $ZEICHEN in concatenation (.) or string at foo.pl line 60

    Kann mir vielleicht jemand erklären wie ich solch eine Variable auch außerhalb der IF Anweisung weiterbenutzen kann??? Ich beschäftige mich noch nicht lange mit Perl.

    Dankeschön
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Jedi Ritter Avatar von Dodo
    Registriert seit
    26.04.2008
    Ort
    Wien
    Alter
    27
    Beiträge
    3.774
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard

    bist du dir sicher, dass die bedingung greift?
    mach dir da mal ne ausgabe rein

    denn eigentlich sollte es danach verfügbar sein
    Something big is coming. And there will be pirates and ninjas and unicorns...

  3. #3
    Unregistriert
    Gast

    Rotes Gesicht Altes Problem ist weg, Neues ist da!

    Ja das funktioniert alles, ich habe den Fehler auch behoben bekommen. Die Fehlfunktion lag nicht daran das die Parameter nicht übergeben wurden, denn das wurden sie problemlos.

    Das Problem liegt (immernoch) darin, das ich diese Werte aus einer Datei auslese, und mein Hauptprogramm die betreffenden Zeilen aus der Datei -> Zeilenweise <- an meine Subroutine schickt!

    So durchläuft meine Sub Zeile für Zeile die Datei, dann findet sie etwas schreibt es in den String, doch sobald mein Hauptprogramm die nächste Zeile übergibt, wird der alte Wert gelöscht und durch einen neuen Überschrieben, der, wenn die Bedingung false ist, natürlich leer ist.

    Deswegen bekomme ich generell leere Strings an mein SQL Statement geschickt, anstelle von gefüllten Strings.

    Hier vielleicht sieht man es anhand des Codes:

    Datei:
    Code:
    * $$ JOB JNM=KALAS1,CLASS=0,DISP=D
    * $$ LST CLASS=A,DISP=D,DEST=(,UUSER)
    // JOB KALAS1 UTFF-MAIN-FILES
    // EXEC IDCAMS
       DEFINE CLUSTER                        -
              (NAME       (AKL.VSAM.UTFFL1)  -
               VOLUMES    (XXXXXX)           -
               RECORDS    (850)              -
               RECORDSIZE (4096 4096)        -
               CISZ       (4096)             -
               SHR        (9 9)              -
               NUMBERED)                     -
       CATALOG  (VSEKL.USER.CATALOG)
    /*
    /&
    * $$ EOJ
    Hauptprogramm:
    Code:
    use IDCAMS;
    
    use strict;
    
    my $BEFEHL = '';
    my $REST = '';
    my $exec = '';
    my $buffer = '';
    my $dlbl = '';
    my $job = '';
    my $Programm = '';
    my $cmd = '';
    my $BINDESTRICH = '';
    
    open(DB, "<$ARGV[0]") || die "Kann Datei nicht öffnen!";
    while(<DB>)
              {
              $buffer = $_;
    
                  if(index($buffer,"// JOB ") != -1)
                  {
                   $job = $buffer;
                   $job =~ m/^(.*?)JOB (.*)$/;
                   print " \n";
                   print "---------------------------------------\n";
                   print "JOBNAME => $2\n";
                  }
                  if(index($buffer,"// DLBL ") != -1)
                  {
                   $dlbl = $buffer;
                   $dlbl =~ m/^(.*?)DLBL (.*),(.*),,(.*)$/;
                   print "DLBL => $2\n";
                  }
                  if(index($buffer,"// EXEC ") != -1)
                  {
                   $exec = $buffer;
                   $exec =~ m/^(.*?)EXEC ([A-Z]*),*(.*)$/;
                   $Programm = $2;
                   print "EXEC => $Programm\n";
                  }
    
                  if((index($buffer,"/") == -1)&&(index($buffer,"*") == -1))
                  {
                   $cmd = $buffer;
                   $cmd =~ m/^.*( - ).*$/;
                   $BINDESTRICH = $1;
    
                   if(defined $BINDESTRICH)
                   {
                   $cmd = $buffer;
                   $cmd =~ m/^[^A-Z]*([A-Z]*)[^A-Z0-9]* (.*) +- .*$/;
                                 #print "Buffer=$cmd\n#$1#$2#\n";
                   $BEFEHL = $1;
                   $REST = $2;
    
                   $REST =~ s/\s+$//g;
                   }
    
                   else
                   {
                   $cmd = $buffer;
                   $cmd =~ m/^[^A-Z]*([A-Z]*)[^A-Z0-9]* (.*) .*$/;
                                 #print "Buffer=$cmd\n#$1#$2#\n";
                   $BEFEHL = $1;
                   $REST = $2;
    
                   $REST =~ s/\s+$//g;
                   }
    
                   if(defined $BINDESTRICH == 0 )
                   {
    
                    if($Programm eq "IDCAMS")
                    {
    
                     IDCAMS($BEFEHL,$REST);
                    }
    
                   }
    
                  }
    
              }
    close(DB);
    Und letzendlich meine Funktion:
    Code:
    use Win32::ODBC;
    use strict;
    
    sub IDCAMS
    {
    my ($TabNAME, $tNAME, $ZEILEN, $ZEIL, $ZEICHEN, $ZEIC, $sql_string, $sql_string2, $db, %Daten);
    my $BEFEHL = *_;
    my $REST = *_;
    
        $BEFEHL = shift;
        $REST = shift;
    
         %Daten = ($BEFEHL, $REST);
    
           if ($Daten{"NAME"})
           {
            $tNAME = $Daten{"NAME"};
    
            $tNAME =~ m/^\((.*?)\.(.*)\.(.*)\)$/;
            $TabNAME = $3;
           }
    
           if ($Daten{"RECORDS"})
           {
            $ZEIL = $Daten{"RECORDS"};
    
            $ZEIL =~ m/^\((.*)\)$/;
            $ZEILEN = $1;
            $ZEILEN++;
           }
    
           if ($Daten{"RECORDSIZE"})
           {
            $ZEIC = $Daten{"RECORDSIZE"};
    
            $ZEIC =~ m/^\((.*) {1}(.*)\)$/;
            $ZEICHEN = $1;
           }
    
             if($Daten{"DEFINE"})
             {
    
                if($Daten{"DEFINE"} eq 'CLUSTER')
                {
    
                   if(!($db = new Win32::ODBC("DSN=SNAME;UID=User;PWD=PASS;")))
                   {
                    print "Fehler beim Verbinden\n";
                    print "Fehler: " . Win32::ODBC::Error() . "\n";
                    exit;
                   }
    
                    $sql_string = ("CREATE TABLE $TabNAME (Nr varchar(20), Zeichen char($ZEICHEN))");
                    $db->Sql($sql_string);
    
                   for (my $i=1;$i<$ZEILEN;$i++)
                   {
                    $sql_string2 = ("INSERT INTO $TabNAME (Nr) VALUES ($i)");
                    $db->Sql($sql_string2);
                   }
    
                     print "\nTablename: ",$TabNAME,"\n";
                     print "Create Table with: ",$ZEILEN," rows\n";
                     print "Row filled with: ",$ZEICHEN," spaces\n";
                     print "---------------------------------------";
                }
    
             }
    }
    1;

    So und wie du siehst, die Datei wird zeilenweise eingelesen und jede einzelne Zeile wird an die Sub übergeben, die läuft einmal komplett durch bis sie die nächste Zeile findet, bis die Datei endet. Und deswegen bekomme ich nur leere Strings an das SQL Statement gesendet.

    Vielleicht hast du ja eine Idee, wenn ja wäre ich sehr dankbar.

    Liebe Grüße

Ähnliche Themen

  1. Umsetzung eines Perl-Skriptes nach PHP
    Von prysma im Forum Job Forum - Jobs für Grafiker, Programmierer und Webmaster
    Antworten: 0
    Letzter Beitrag: 25.07.2008, 20:57
  2. Wie bekomme ich ein eine Variable eine Post variable?
    Von Gigazone im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 7
    Letzter Beitrag: 27.05.2006, 16:41
  3. Variable nach klick auf links weg
    Von Icke im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 7
    Letzter Beitrag: 20.12.2005, 20:44
  4. Text-Zahl in Variable in Integer-Zahl in Variable umformen
    Von Steven im Forum HTML & CSS Forum
    Antworten: 8
    Letzter Beitrag: 13.06.2005, 13:30
  5. Parameter von HTML nach PERL
    Von Lu im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 0
    Letzter Beitrag: 30.11.2004, 01:55

Stichworte

Berechtigungen

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