Bine: seek-Aufruf wird ignoriert

Beitrag lesen

Moin,

$output ist als append eingestellt.

Umsetzung siehe unten

Der schreibt aber alles untereinander, unabhängig davon, wo der Zähler ($c - der funktioniert) steht.
Was wird untereinander geschrieben? Bedenke, dass seek() nur der Positionierung des Dateizeigers dient, Platz für einen neuen Eintrag schafft er nicht. Und schließlich: Wie ermittelst du $c?

also eigentlich verarbeitet der mehrere Ausgangsdateien. Aus der ersten zieht er einen Wert und die Zeilennamen, für die anderen Dateien soll er die Werte nur den Zeilen zuordnen und hinten anhängen. Er schreibt die Werte aber unter die letzte Zeile.

Du solltest ein bisschen mehr von deinem Script offenbaren, so kann man dir nicht helfen, nur raten.

Findet mein Chef sicher nicht so toll... Trotzdem, ich muss ja weiter kommen:

das Teil soll aus einem Quelltext Variablen und die dazugehörigen Werte rausschreiben

#!/usr/bin/perl

$length=1;
$counter=0;    # zählt die Dateien

$output=">>params.cvs";

while ($length>0)
{
  $file=sprintf("*Pfad, Dateinamen unterscheiden sich durch Zähler*",$counter);

open(INPUT, $file);  #Einlesen der Quelldatei (Quelltext)
  @List = <INPUT>;
  close(INPUT);

$end=1;  # dient als Abbruchbedingung, weil ich nur einen Teil des
             Textes einlesen will
  $c=0;    # zählt die rausgeschriebenen Variablen

$length=@List;   # weil ich nicht genau weiß, wieviele Dateien
                     dieses Typs ich einlesen will, stell ich so
                     fest, ob die Datei leer ist. Wenn ja, hör ich
                     auf mit dem Programm (sind aufsteigend
                     nummeriert)

foreach $File(@List)
  {
    $sigs="";
    if (index($File,"*** GUI ***")>=0)   #ab dieser Textstelle brauch
                                          ich nix mehr auswerten->
                                          Abbruch (if-Anweisung unten
                                          wird nicht mehr ausgeführt)
    {
      $end=0;
    }

if ((index($File,"#define")>=0)&&($end>0))  #mein Schlagwort,
                                                 dahinter steht das,
                                                 was ich suche
    {
#jetzt wird's ziemlich chaotisch. Die Trennung ist hier durch Leerzeichen umgesetzt, die kann ich aber nicht vernünftig verarbeiten, auch weil es immer eine unterschiedliche Anzahl ist. Deswegen ersetz ich alle durch Ä's (die kommen in der Datei nicht vor) und fasse dann Ä's zu einem eindeutigen Trennzeichen zusammen (ÄÄÄ). Ich weiß, ist alles andere als ne Ideallösung, aber es geht (ich sagte ja, ich hab nicht viel Ahnung!)

$l=length($File);
     my @sign;
     for(my $i=0; $i<$l; $i++)
      {
        $h=substr($File,$i,1);
 if ($h ne " ")
 {
          @sign[$i]=$h;
 }
 else
 {
   @sign[$i]='Ä';
        }
      $sigs=sprintf("%s%s",$sigs,@sign[$i]);
      }

$sigs=~ s/\t+/ÄÄÄ/g;    # ab und zu kommen auch mal Tabs als
                                Trennzeichen vor
      $sigs=~ s/Ä+/ÄÄÄ/g;

@tmp=split(/ÄÄÄ/,$sigs);
      # in $tmp[1] steht der Name der Variablen, in $tmp[2] der Wert,
        den ich suche

if (index($tmp[2],"(")<0)   # Werte in Klammern brauch ich
                                     nicht
      {
        $c++; # zählt die Variablen und wird nach Ende der Datei
                wieder auf Null gesetzt
        if ($counter==0)        # Name mit in Zeile schreiben
        {
          @write=($tmp[1],' ', $tmp[2],"\n");
        }
        else
        # weil's in der Zeile angefügt werden soll, brauch ich ab der
          zweiten Datei den Namen nicht mehr
        {
          @write=(" ",$tmp[2]);
        }

# und jetzt kommt das berühmte seek...
 open(OUTPUT, $output);
        seek (OUTPUT, $c, 0);
 print OUTPUT @write;
        close(OUTPUT);

}
    }
  }
  $counter++;
}

Hmmm, hilft das jetzt weiter?

Mal ein ganz simples Beispiel

Ich bin am Ausprobieren, will aber noch nicht so richtig. Ich geb dann Bescheid. Das seek geht aber nach wie vor nicht.

Trotzdem schonmal danke für deine Hilfe!
Bine