Frage zur Dateiausgabe / Zeilennummerierung?

haeuslebauer

Lt. Commander
Registriert
Dez. 2010
Beiträge
1.377
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
 
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
 
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.
 
Zuletzt bearbeitet:
haeuslebauer schrieb:
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.
 
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
 
haeuslebauer schrieb:
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)

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.



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;
 
Zuletzt bearbeitet:
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:

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
 
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?

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 :freak:
 
Zuletzt bearbeitet: (2== und nicht 1=... was ist heute nur los :D)
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)
 
haeuslebauer schrieb:
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?
 
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?
 
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 :)
 

Ähnliche Themen

Zurück
Oben