Quitschibo: Eine Variable soll immer nur Zahlen mit einer einzigen bestimmten wertigkeit hab

Hi,

ich glaube ich hab da ein etwas defizileres Problem... ich werd mal versuchen das zu beschreiben...

ich habe ein script das folgende Zahlenwerte auf die Variable $x ausgibt:

1111111110000
222221111111000000
222210004444

etc...

die zahlenwerte werden zum speichern von daten in .txt files gebraucht... die .txt files werden über diese Zahlen angesprochen also zb. file0.txt file1.txt file2.txt
wie oft eine Zahl vorkommt zeigt dem Script wieviele einträge es in die Datei machen soll... das funktioniert soweit auch, aber das problem ist folgendes... nehmen wir mal den 222111000 string...
ich mach mein script folgendes...
alle daten die für die zahl 2 bestimmt sind kommen in file2.txt alle Daten die für die zahl 1 bestimmt sind gehen in file1.txt allerdings leider auch nochmal die daten die in file2.txt bereits drin sind.. und so geht das dann immer weiter...
die zahl die als erste steht bekommt also auch alle anderen Einträge mit ab...
wie kann ich das also einschränken das der für jeden zahlenwert auch nur die entsprechenden daten in das file schreibt und nicht gleich alle anderen noch dazu...

ich hoffe das mir da wer helfen kann

CU Quitschi

  1. Hallo,
    leider seh ich den Source-Code nicht, aber ich versuch mich mal in einer Lösung  !!

    Dabei könnte der Fehler in deiner Logik sein, mit welchen Namen du die  Dateien öffnest. So wie du das schreibst, geh ich nun mal davon aus, das die Zahelnfolgen kompat auftreten, dann kannst du doch zuerst eine Datei öffnen, die Bearbeitung abschliesen und dann die Datei wieder schliesen. Erst jetzt öffnest du die nächste Datei, dabei solte eigentlich nichts schiefgehen können !!

    die zahlenwerte werden zum speichern von daten in .txt files gebraucht... die .txt files werden über diese Zahlen angesprochen also zb. file0.txt file1.txt file2.txt
    wie oft eine Zahl vorkommt zeigt dem Script wieviele einträge es in die Datei machen soll... das funktioniert soweit auch, aber das problem ist folgendes... nehmen wir mal den 222111000 string...
    ich mach mein script folgendes...
    alle daten die für die zahl 2 bestimmt sind kommen in file2.txt alle Daten die für die zahl 1 bestimmt sind gehen in file1.txt allerdings leider auch nochmal die daten die in file2.txt bereits drin sind.. und so geht das dann immer weiter...

    Das scheint mir nocah einem dateiezeigerkonflikt zu handeln, leider weiß ich nicht genau wie das in PERL gelöst ist.

    die zahl die als erste steht bekommt also auch alle anderen Einträge mit ab...
    wie kann ich das also einschränken das der für jeden zahlenwert auch nur die entsprechenden daten in das file schreibt und nicht gleich alle anderen noch dazu...

    wie gesagt bearbeite die Datei und schließ sie dann danach !!

    Ich hoffe ich konnte dir helfen !!

    Bis denn ... Starbuck

    1. Hi Nochmal,

      okey... wie ich sehe braucht ihr doch den Quellcode... dann will ich euch mal die bearbeitungssub hier posten...

      sub manipulation
      {
      @topicsystem = ("");
      @topicinhaltsystem = ("");

      Hier werden nur die Topics abgearbeitet... da diese aber eh alle in einer Datei stehen ist es egal (hier tritt der Fehler eben noch nicht auf

      for ($i = $#data; $i >= 0; $i--)  
      

      {
        ($topic, $numt, $others) = split(//,$data[$i]);
        chop $others;
        push (@topicsystem, "$FORM{$i}$numt$others");

      open (FILE,">test.txt");
        foreach $line(@topicsystem)
         {
         if ($line ne "")
          {
          print FILE "$line\n";
          }
         }
                      close(FILE);

      So, bis hierher wurden die Topics abgehandelt... nun wird für jedes Topic das es gibt die jeweilige Topic .txt file geöffnet. Anhand von $numt wird bestimmt welche Datei eben geöffnet werden muss.##

      open(FILE, "$data_path/ch$numt.txt");
        @choices = <FILE>;
        close(FILE);
        for ($j = $#choices; $j >= 0; $j--)
         {
         ($name, $votes, $pos) = split(//,$choices
      [$j]);  
                              $name = "$i". "X$j";
         $votes = "$i". "Y$j";
         chop $pos;
         push (@topicinhaltsystem, "$FORM{$votes}$FORM{$name}$pos");

      hier habe ich mir zur kontroll $i anzeigen lassen... das ist die Variable die so aussieht wie ich es beschrieben hab, als 111110000333555 etc...##

      print $i;

      Dieser Teil sortiert die Eintragungen dann noch nach Stimmenzahl des Votingsystems...##

      @topicinhaltsystem = reverse @topicinhaltsystem;
         open(TEMPX, ">$data_path/temp$numt.db");
         foreach $line2 (@topicinhaltsystem)
          {
          if ($line2 ne "")
           {
           print TEMPX "$line2\n";
           }
          }
         close(TEMPX);

      open(TEMP2, "<$data\_path/temp$numt.db");  
      @temps = <TEMP2>;  
      close(TEMP2);  
      
      @temps = sort NummernSort @temps;  
      @temps = reverse @temps;  
      
      open(FILE, ">$data\_path/testch$numt.txt");  
      foreach $tempval (@temps)  
      

      {
        ($votes, $topic, $num) = split(//, $tempval);
        print FILE "$topic$votes$num";
        }
      close(FILE);

      unlink ("$data\_path/temp$numt.db");  
      

      }

      }
      }

      Sodale... ist etwas kompliziert... aber es funktioniert soweit ja ganz gut... nur eben das Problem mit den Mehrfacheinträgen bei den Files...

      CU Quitschi

  2. Hi,

    das ganze ist vielleicht ein bißchen ungenau;

    ich habe ein script das folgende Zahlenwerte auf die Variable $x
    ausgibt:

    1111111110000
    222221111111000000
    222210004444

    etc...

    die zahlenwerte werden zum speichern von daten in .txt files
    gebraucht...

    wie sehen die Daten aus?

    die .txt files werden über diese Zahlen angesprochen also zb.
    file0.txt file1.txt file2.txt

    Ergeben sich die Ziffern-Endungen durch die Zahlen in dem String?

    alle daten die für die zahl 2 bestimmt sind kommen in file2.txt
    alle Daten die für die zahl 1 bestimmt sind gehen in file1.txt
    allerdings leider auch nochmal die daten die in file2.txt bereits
    drin sind.. und so geht das dann immer weiter...

    Vielleicht postest du mal ein bißchen Quelltext, damit man das
    Problem verstehen kann?

    ich hoffe das mir da wer helfen kann

    Mit entsprechenden Infos wird dir bestimmt jemand helfen können ,)

    mfg
    CK1

  3. Hi Quitschi,

    wenn ich Dein Problem richtig verstanden habe, könnte sowas helfen:

    -------------------------------------------------------------------------------
    $filenum = '';

    for each $num (split '', $x)    # einen String 1111122240000 in einzelne Zeichen zerlegen
    {
      if ($filenum ne $num)
      {
        close DATEI if $filenum;
        open (DATEI, ">>file$num.txt");
        $filenum = $num;
      }
      print DATEI "$num\n";
    }

    close DATEI;
    -------------------------------------------------------------------------------

    Vielleicht verlierst Du ja noch mal ein Wort darüber, wo Dein Denkfehler lag (falls das hier funktionieren sollte).

    Gruß,
       Jörk