1. #1
    Lt. Junior Grade
    Dabei seit
    Dez 2010
    Beiträge
    266

    Frage zur Dateiausgabe / Zeilennummerierung?

    Hi,

    ich gebe in einem Python-Programm eine Datei aus. Dabei muss jede Zeile nummeriert werden. Momentan mache ich das während dem Schreiben, indem ich nach jeder Zeile einen Zähler erhöhe.

    Der Uebersichtlichkeit des Programmes würde es gut tun, wenn ich die Dateien ohne Zeilennummern schreiben würde, und nachträglich die Datei nochmals lese und die Zeilennummern einfüge.

    Ist das eine gute oder schlechte Idee? Geschwindigkeit ist nicht so wichtig, aber wenns blöd ist mach ichs nicht :-)

    Danke

  2. Anzeige
    Logge dich ein, um diese Anzeige nicht zu sehen.
  3. #2
    Cadet 3rd Year
    Dabei seit
    Feb 2009
    Beiträge
    58

    AW: Frage zur Dateiausgabe / Zeilennummerierung?

    was ganz simpel wär:
    cat -n datei > datei

  4. #3
    Lt. Junior Grade
    Ersteller dieses Themas

    Dabei seit
    Dez 2010
    Beiträge
    266

    AW: Frage zur Dateiausgabe / Zeilennummerierung?

    Hi

    cat -n? Ich finde grad nichts dazu auf die Schnelle, hast du vielleicht einen Link für mich?
    Ich muss in Fünfer oder -Zehnerblöcken nummerieren.

    Danke

  5. #4
    Cadet 3rd Year
    Dabei seit
    Feb 2009
    Beiträge
    58

    AW: Frage zur Dateiausgabe / Zeilennummerierung?

    Dazu musst du dir dann http://getgnuwin32.sourceforge.net/ runterladen (da du wohl Windows benutzt)
    In welchem Package sich cat befindet weiß ich nicht, warscheinlich aber CoreUtils.

    cat -n macht nichts anderes als die angegeben Datei auszugeben und die Zeilen zu numerieren.

    Wenn du aber nur 5er und 10er Blöcke willst musst du aber noch zusätzlich Filtern.

    Warscheinlich wirds wohl einfacher sein wenn du bereits zur erstellung deiner Datei die Zeilennummer vorne hinzufügtst.
    Geändert von beig1 (25.06.2012 um 11:45 Uhr)

  6. #5
    Lieutenant
    Dabei seit
    Jan 2010
    Beiträge
    622

    AW: Frage zur Dateiausgabe / Zeilennummerierung?

    Zitat Zitat von haeuslebauer Beitrag anzeigen
    Ist das eine gute oder schlechte Idee? Geschwindigkeit ist nicht so wichtig, aber wenns blöd ist mach ichs nicht :-)

    Danke
    Ist blöd, weil doppelte ,Arbeit' und sowas probiert man ja zu vermeiden. Und so unübersichtlich kann dein Programm ja gar nicht sein mit nur einen Zähler davor schreiben; wenn doch, dann machst du irgendwas falsch.

  7. #6
    Lt. Junior Grade
    Ersteller dieses Themas

    Dabei seit
    Dez 2010
    Beiträge
    266

    AW: Frage zur Dateiausgabe / Zeilennummerierung?

    Und so unübersichtlich kann dein Programm ja gar nicht sein mit nur einen Zähler davor schreiben; wenn doch, dann machst du irgendwas falsch.
    ich brauche halt an jeder Stelle wo eine Zeile geschrieben wird eine zusätzliche Zeile um den Zähler zu erhöhen

    if (tralala):
    Schreib dies und das
    Zähler+=10
    elif (tralala):
    Schreib dies und das
    Zähler+=10
    else (tralala):
    Schreib dies und das
    Zähler+=10

    Grüsse

  8. #7
    Lieutenant
    Dabei seit
    Jan 2010
    Beiträge
    622

    AW: Frage zur Dateiausgabe / Zeilennummerierung?

    Zitat Zitat von haeuslebauer Beitrag anzeigen
    ich brauche halt an jeder Stelle wo eine Zeile geschrieben wird eine zusätzliche Zeile um den Zähler zu erhöhen
    Nein, brauchst du eben nicht.
    Bei jedem Schreibvorgang wird ja logischerweise die Zeile um 1 erhöht, also kannst du die Erhöhung vor die If-else stellen oder danach (je nach Aufbau und Vorliebe)

    Code [php]:
    zeile+=10
    
    if (tralala):
    Schreib dies und das
    elif (tralala):
    Schreib dies und das
    else (tralala):
    Schreib dies und das
    Wenn du noch Abzweigungen hast, wo der Zeile nicht erhöht werden muss oder soll (warum auch immer), dann kannst du es auch anders verpacken. Hier wieder nach Vorlieben und Aufbau sortieren.



    Code [php]:
    if (tralala):
    Schreib dies und das mit Zeile
    elif (tralala):
    Schreib dies und das mit Zeile
    else (tralala):
    Schreib dies und das mit Zeile
    else (blubb):
    Schreib dies und das OHNE Zeile
    
    if(tralala) or (tralala) or (tralala):
    zeile+=10;
    Geändert von DasBoeseLebt (25.06.2012 um 13:39 Uhr)

  9. #8
    Lt. Junior Grade
    Ersteller dieses Themas

    Dabei seit
    Dez 2010
    Beiträge
    266

    AW: Frage zur Dateiausgabe / Zeilennummerierung?

    Danke für deine Tipps

    ich steh gerade leider etwas auf dem Schlauch.

    Mein Beispiel oben war auch schlecht, denn es würde demnach ja nur eine der Bedingungen zutreffem und eine Zeile geschrieben. In dem Fall müsste natürlich auch nur einmal pro Schleife der Zähler erhöht werden.Tatsächlich füge ich an vielen Stellen Zeilen nur ein, wenn ein bestimmter Fall eintrifft:

    Code [php]:
    writeline
    counter+=10
    
    if(a>b):
    writeline
    counter+=10
    
    if(c>d):
    writeline
    counter+=10
    
    writeline
    counter+=10
    wenn der Fall nicht zutrifft wird der Zähler auch nicht erhöht.

    Am Ende kommt z.b. noch ein Block zum Abschluss der Datei, ca. 10 Zeilen. Da muss ich ja auch erst schauen wo der Zähler nun steht und dann die Nummern vor jede Zeile schreiben.

    Grüsse

  10. #9
    Lieutenant
    Dabei seit
    Jan 2010
    Beiträge
    622

    AW: Frage zur Dateiausgabe / Zeilennummerierung?

    Ich weiß nicht, ob ich das jetzt so richtig verstehe, aber normal fügt man doch nicht willkürlichen Zeilennummer ein, sondern in 5er, 10er, ...etc Schritten.

    Demnach kannst du da simpel mit Modulo arbeiten?

    Code [php]:
    if(zeile % 10 == 0):
    // 10Zeilen Abstand
    // Schreibe Zeile + Text
    else:
    // Schreibe Text
    
    
    // ODER
    
    
    if(zeile % 5 == 0):
    // 5Zeilen Abstand
    // Schreibe Zeile + Text
    else:
    // Schreibe Text
    Und eigentlich ändert sich da nichts groß dran, den du erhöhst dann einfach immer noch pro writeline die Variable zeile um 1.

    Ansonsten musst du es mal wirklich richtig erklären oder ich bin zu blöd
    Geändert von DasBoeseLebt (25.06.2012 um 15:44 Uhr) Grund: 2== und nicht 1=... was ist heute nur los :D

  11. #10
    Lt. Junior Grade
    Ersteller dieses Themas

    Dabei seit
    Dez 2010
    Beiträge
    266

    AW: Frage zur Dateiausgabe / Zeilennummerierung?

    also das Programm geht letztendlich an eine Maschine. Diese liest die Befehle Zeile für Zeile. Jede Zeile muss dabei mit "N" und einer Nummer beginnen. (N1, N2, N3). In der Datei darf keine Nummer zweimal vorkommen und man inkrementiert üblicherweise in 5er oder Zehnerschritten um nachträglich auch manuell noch Zwischenzeilen einfügen zu können.(N10,N20,N30)

  12. #11
    Lt. Junior Grade
    Dabei seit
    Aug 2011
    Beiträge
    423

    AW: Frage zur Dateiausgabe / Zeilennummerierung?

    Zitat Zitat von haeuslebauer Beitrag anzeigen
    also das Programm geht letztendlich an eine Maschine. Diese liest die Befehle Zeile für Zeile. Jede Zeile muss dabei mit "N" und einer Nummer beginnen. (N1, N2, N3). In der Datei darf keine Nummer zweimal vorkommen und man inkrementiert üblicherweise in 5er oder Zehnerschritten um nachträglich auch manuell noch Zwischenzeilen einfügen zu können.(N10,N20,N30)
    Hört sich schwer nach Basic an ^^ Wenn du eh vom Programm durchnumerieren lässt, brauchst du eigentlich auch keine Zahlen frei zu lassen. Wenn du mittendrin was ändern willst kannst dus ja ändern und mit dem Programm neu durchnumerieren ^^ Ansonsten würd ic hbei jeder zeile die ich einfüge einfach nen Counter um eins hochzählen und counter*5 als Zahl vor die zeile schreiben, so verschwendeste zwar zeilen aber who cares?

  13. #12
    Lieutenant
    Dabei seit
    Jan 2011
    Beiträge
    763

    AW: Frage zur Dateiausgabe / Zeilennummerierung?

    Also so etwas:
    Code:
      function int writeNumberedLine(int zeile, String text) {
        writeLine("N" + zeile + "text");
        return zeile + 10;
      }
      ...
      int zeile = 10;
      zeile = writeNumberedLine(zeile, "blala");
      zeile = writeNumberedLine(zeile, "blubb");
    Ist jetzt nicht 100% Python aber die Idee ist klar?
    "I shall build a table, a round table, so that everyone can look each other in the eye.
    And I shall be elevated above you, in a rocket chair, a magnificent rocket chair,
    so I can look down on all of you and see just how equal we all are." ~ Nostalgia Critic, Kickassia

  14. #13
    Lt. Junior Grade
    Ersteller dieses Themas

    Dabei seit
    Dez 2010
    Beiträge
    266

    AW: Frage zur Dateiausgabe / Zeilennummerierung?

    Hört sich schwer nach Basic an ^^
    es geht um Programme nach DIN66025 wenn es euch interessiert
    Wenn du eh vom Programm durchnumerieren lässt, brauchst du eigentlich auch keine Zahlen frei zu lassen. Wenn du mittendrin was ändern willst kannst dus ja ändern und mit dem Programm neu durchnumerieren ^^ Ansonsten würd ic hbei jeder zeile die ich einfüge einfach nen Counter um eins hochzählen und counter*5 als Zahl vor die zeile schreiben, so verschwendeste zwar zeilen aber who cares?
    genau so mache ich es im Moment.

    Ist jetzt nicht 100% Python aber die Idee ist klar?
    Ja, das schaut gut aus. Ich dachte mir das auch schon so, denn es gibt eine Hauptfunktion, welche den Grossteil der Zeilen schreibt. Dort könnte ich einen Counter integrieren und somit einige Zeilen sparen

Berechtigungen

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