Seite 1 von 1

griech. Buchstaben in txt Datei ausgeben?

Verfasst: Mittwoch 22. Oktober 2008, 13:00
von mathi
Hallo allerseits:

Code: Alles auswählen

print u' \u03b1 > 45 !!!'  #alpha
funktioniert,

aber wenn ich dies in eine text-Datei schreiben will??

Code: Alles auswählen

sichern=file('Ergebnisse.txt','a')          
                    sichern.write('Winkel der Bewehrung \u03b1=%s °\n' % format(alpha,'%0.1f')) #alpha
                    sichern.write('------------------------------------------------\n')
                    sichern.close()
                    print u'Eingabe & Ergebnisse in -Ergebnisse.txt- gesichert'
geht nicht. Wo liegt mein Denkfehler bzw. wie kann ich erreichen was ich möchte??

Verfasst: Mittwoch 22. Oktober 2008, 13:11
von Leonidas
Also wenn du die Buchstaben UTF-8 kodierst in die Textdatei schreibst geht es wunderbar. Da müsste man sich natürlich vorher mit Encodings auseinandersetzen, aber das hatten wir ja erst vor ein paar Tagen.

Verfasst: Mittwoch 22. Oktober 2008, 13:38
von mathi
Danke hat geklappt,

kleines Problem dabei: \n zum Beginnen mit der neuen Zeile funktioniert nun nicht mehr, klar wegen (u'....'), wie kann ich es schaffen, dass die Ausgabe wieder in Zeilen untereinander funktioniert?

Code: Alles auswählen

sichern=codecs.open('Ergebnisse.txt','a', 'utf-8')          
                    sichern.write(u'-------------Schub in Fugen----------------\n')
                    sichern.write(u'Bauteilbreite b=%s cm\n' % format((b/10),'%0.1f'))        
                    sichern.write(u'Bauteilhöhe h=%s cm\n' % format((h/10),'%0.1f'))
                    sichern.write(u'Bewehrungsschwerpunkt d.1=%s cm\n' % format((d1/10),'%0.1f'))
                    sichern.write(u'Betongüte f.ck=%d N/mm²\n' % fck)
                    sichern.write(u'f.cd=%s N/mm²\n' % format(fcd))
                    sichern.write(u'Querkraft v.Ed=%s kN/m\n' % format(ved))
                    sichern.write(u'Reibungsbeiwert \u03bc=%s\n' % format(mue,'%0.1f'))    #mue
                    sichern.write(u'Winkel der Bewehrung \u03b1=%s °\n' % format(alpha,'%0.1f')) #alpha
                    if sorte==1:
                        sichern.write(u'Gitterträger: f.yd=%s N/mm²' % format(fyd))
                    else:
                        sichern.write(u'Betonstahl: f.yd=%s N/mm²' % format(fyd))
                    sichern.write(u'Rauigkeitsbeiwert c.j=%s\n' % format(cj,'%0.5f'))
                    sichern.write(u'v.Ed=%s kN/m' % format(vedf))
                    sichern.write(u'V.Rdj,ct=%s kN/m' % format(vrdjct))
                    sichern.write(u'V.Rdj,max=%s kN/m' % format(vrdjmax))
                    if vedf<vrdjct:
                        sichern.write(u'keine Verbundbewehrung erforderlich')
                    elif vedf>vrdjmax:
                        sichern.write(u'v.ed > v.Rdj,max')
                    else:
                        sichern.write(u'a.s,verbund=%s cm²/m' % format((averbund*10000)))
                    sichern.write(u'------------------------------------------------\n')
                    sichern.close()

Verfasst: Mittwoch 22. Oktober 2008, 13:57
von Hyperion
Also ehrlich gesagt sieht der Code ja recht "grauenvoll" aus ;-)

Entweder machst Du Dir vorher eine Liste von Einträgen und schreibst die dann in einer Schleife weg, oder aber Du legst diesen Textblock erst einmal irgend wo ab und nutzt dann Templating Mechanismen, um die variablen Werte reinzuschreiben. Diese zig Aufrufe von "sichern.write" sind ja extrem schlecht zu warten imho.

Du musst die Datei mit dem Modus "aw" öffnen, dann klappt's auch.

Verfasst: Mittwoch 22. Oktober 2008, 14:19
von mathi
Hyperion hat geschrieben:Also ehrlich gesagt sieht der Code ja recht "grauenvoll" aus ;-)

erstmal danke, jetzt gehts.

ich habe den Code so geschrieben, weil ich es nicht besser weiß, könntest Du mir evtl. einen denkanstoß geben wie es Deiner Meinung nach z.B. aussehen könnte?

So soll die Ausgabe ja aussehen:

Code: Alles auswählen

-------------Schub in Fugen----------------
Bauteilbreite b=100,0 cm
Bauteilhöhe h=20,0 cm
Bewehrungsschwerpunkt d.1=5,0 cm
Betongüte f.ck=20 N/mm²
f.cd=11,33 N/mm²
Querkraft v.Ed=100.000,00 kN/m
Reibungsbeiwert μ=0,7  # mue , da schlägt das coding wieder zu :-)
Winkel der Bewehrung α=90,0 ° #alpha
Betonstahl: f.yd=434,78 N/mm²
Rauigkeitsbeiwert c.j=0,40000
v.Ed=1.333,33 kN/m
V.Rdj,ct=343,84 kN/m
V.Rdj,max=2.833,33 kN/m
a.s,verbund=1.916.666,67 cm²/m
------------------------------------------------

und ohne vermessen sein zu wollen, hat jemand eine Ahnung wie ich statt f.ck -> fck ausgeben kann? kann man z.B. die Schriftgröße einzelner Buchstaben variieren?

Verfasst: Mittwoch 22. Oktober 2008, 16:50
von BlackJack
Ich glaube die Frage nach Schriftgrössen hatten wir schon mal. Textdateien enthalten keine Informationen über die Schrift oder deren Grösse, sondern nur Zeichen. In welcher Schrift und Grösse die angezeigt werden, hängt ganz alleine vom Texteditor bzw. dem Programm mit dem der Text angezeigt wird, ab.

Für solche Formatierungen bräuchtest Du ein Datenformat, das Textauszeichnungen unterstützt. Einfachste Variante wäre wahrscheinlich HTML.

Oder Du fängst an, den Text in einem "2D-Layout" zu schreiben, so wie die armen Mathematiker das mit ihrer Schreibmaschine gemacht haben, bevor Knuth TeX erfand. :-)

Code: Alles auswählen

                   N
Betongüte f  = 20 ---
           ck     mm²
Das funktioniert dann natürlich nur wenn der Text mit einer "monospace"-Schriftart wie Courier (New) angezeigt wird.

Eventuell lohnt sich ein Blick in eine Template-Bibliothek wie Cheetah oder Genshi. Falls Du die Ausgaben irgend wann einmal mit HTML formatieren möchtest, auf jeden Fall.

Verfasst: Mittwoch 22. Oktober 2008, 19:36
von Leonidas
BlackJack hat geschrieben:Eventuell lohnt sich ein Blick in eine Template-Bibliothek wie Cheetah oder Genshi. Falls Du die Ausgaben irgend wann einmal mit HTML formatieren möchtest, auf jeden Fall.
Genshi ist für HTML/XML nett, aber für Text würde ich eher auf Mako oder Jinja zurückgreifen. Die Text-Templates von Genshi sind nun ja, doch etwas arg eingeschränkt und man will ja nicht eine Template-Engine sofort wieder wechseln wenn sich rausstellt, dass die wenig bietet.