Stefan: Neue 1. Zeile einfügen

Hallo,

ein Programm gibt mir eine lange Textdatei mit Werten aus, die in der Datenbank Access weiter verarbeitet werden.

Die Daten importiere ich direkt ins Access. Leider gibt das Programm beim Export keine Feldnamen (in der ersten Zeile) mit aus. Wenn ich die Feldnamen im Format
Feldname1-Tabulator-Feldname2-Tabulator-Feldname3...
reinschreibe, dann kann ich im Access besser weiterarbeiten, weil ich weiß, welche Werte in den (ca. 20) Spalten  stehen.

Kann ich das mit Perl machen: eine Datei öffnen, vor die erste Zeile eine neue Zeile einfügen und in diese dann meine Feldnamen (mit Tabulatoren getrennt, s.o.) reinschreiben? Und wenn ja: Wie geht das? Habe früher nur mal ein wenig mit Perl gearbeitet und kenne mich nicht mehr darin aus.

Vielen Dank für's Helfen.

Stefan

  1. Hi,

    Kann ich das mit Perl machen: eine Datei öffnen, vor die erste Zeile eine neue Zeile einfügen

    Perl kann alles[tm]. Was Dir hier im Wege steht ist Dein Filesystem: Ich unterstelle, dass es nicht zu denen[1] gehört, die den Anfang einer Datei vorverlegen können.

    Und wenn ja: Wie geht das?

    Schreibe die _komplette_ Datei neu.

    Cheatah

    [1] Nach letzter Zählung in den mir bekannten Filesystemen gibt es derer genau gar keins.

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo,

      ... Was Dir hier im Wege steht ist ...

      ... meine Unerfahrenheit mit Perl, sonst nix!

      Schreibe die _komplette_ Datei neu.

      Ich sitze hier schon seit zwei Stunden rum und bringe das nicht hin. Der SELF-Gedanke ist mir durchaus bekannt. Das ich mit 'write' was in eine Datei schreiben kann habe ich gelesen - es klappt halt nur nicht.

      $erste_zeile  = "";
      $erste_zeile .= "feld1";
      $erste_zeile .= \t;
      $erste_zeile .= "feld2";
      $erste_zeile .= \t;

      ...

      $erste_zeile .= \n;

      write $erste_zeile;

      Stefan

      1. Hi,

        ... Was Dir hier im Wege steht ist ...
        ... meine Unerfahrenheit mit Perl, sonst nix!

        Perl wird mit einer recht annehmbaren Dokumentation geliefert. Hast Du diese konsultiert?

        Schreibe die _komplette_ Datei neu.
        Ich sitze hier schon seit zwei Stunden rum und bringe das nicht hin. Der SELF-Gedanke ist mir durchaus bekannt. Das ich mit 'write' was in eine Datei schreiben kann habe ich gelesen - es klappt halt nur nicht.

        [...]

        write $erste_zeile;

        Wo schreibst Du alle übrigen Zeilen?

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hallo,

          ... Hast Du diese konsultiert?

          Ich wiederhole mich gerne: der SELF-Gedanke ist mir durchaus bekannt.

          Wo schreibst Du alle übrigen Zeilen?

          Du hast anscheinend mein erstes Posting nicht verstanden.

          Ich bekomme eine komplette Textdatei geliefert. Das einzige, was ich damit machen will, ist in diese eine neue erste Zeile mit den Feldnamen, getrennt durch Tabulatoren, einzufügen. Sonst nichts.

          Stefan

          1. Wo schreibst Du alle übrigen Zeilen?
            Du hast anscheinend mein erstes Posting nicht verstanden.

            Doch, hat er.

            Du Cheatahs erstes Posting aber wohl nicht.

            Ich bekomme eine komplette Textdatei geliefert. Das einzige, was ich damit machen will, ist in diese eine neue erste Zeile mit den Feldnamen, getrennt durch Tabulatoren, einzufügen. Sonst nichts.

            Cheatah sagte dir, dass es nicht möglich ist, in einer Datei "was davor" zu schreiben - das gilt für alle heute existierenden Dateisysteme.

            Seine Arbeitsanweisung war: Schreibe die komplette Datei neu.

            Und jetzt kommst du: Was ist zu tun, wenn du
            a) eine neue erste Zeile
            b) den gesamten Inhalt der bestehenden Datei
            c) nach Cheatahs Aussage komplett neu in eine Datei schreiben
            sollst.

            1. Aus seiner ersten Antwort:

              Perl kann alles[tm].

              Wenn ich es könnte, dann würde ich nicht nachfragen. Perl ist für mich etwas, was ich ein- oder zweimal im Jahr brauche.

              Stefan

      2. Hey,

        Das ich mit 'write' was in eine Datei schreiben kann habe ich gelesen

        wo hast du das denn her? Du hast gewiss keine Formate definiert, also nimm print statt write. Mach vorher ein Filehandle mit open auf.
        Oder da das den ganzen Lernaufwand nicht rechtfertigt, benutze Tie::File und behandle die Datei wie eine Liste und füge die Kopfzeile mit unshift ein. http://search.cpan.org/dist/Tie-File/lib/Tie/File.pm#SYNOPSIS

        es klappt halt nur nicht.

        Miserable Problembeschreibung. Für die Zukunft: Was erwartest du? Was passiert stattdessen?

        --
        水-金-地-火-木-土-天-海-冥
        1. Hey,

          wo hast du das denn her?

          http://de.selfhtml.org/perl/funktionen/einausgabe.htm#formathier

          Oder da das den ganzen Lernaufwand nicht rechtfertigt,

          Du sprichst mir aus der Seele ...

          benutze Tie::File und behandle die Datei wie eine Liste ...

          *DAS* nenne ich Hilfe zur SELFsthilfe - Danke!!!

          @Cheatah:
          ... nee - ich laß' es .....

          Stefan

    2. Hey,
      auf zu neuen Horizonten: das Dateisystem eines bspw. System/370-Mainframes hat nicht streamorientierte Dateien, sondern Datensätze mit festen Längen. Da geht das Voreinfügen, ohne die Datei komplett neu schreiben zu müssen.

      --
      水-金-地-火-木-土-天-海-冥