Text in Spalten ausrichten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Hallo, ich weiß nicht recht, wie ich das am besten mit einem Python script machen sollte:

unordentlicher C++ Code

Code: Alles auswählen

{ 
  {stra1 , stra2        ,   stra3 , stra4 },
  {   strdffb1 , strfffb2     ,   strb3 , strbff4 },
  {  strssc1 , strc2          ,  stssrc3 , stffrc4 },
  { strd1, steddddddderd2 ,   strfffd3 , ddddstrfffd4 }
}
sollte danach so aussehen:

Code: Alles auswählen

{ 
  { stra1,    stra2,          stra3,    stra4        },
  { strdffb1, strfffb2,       strb3,    strbff4      },
  { strssc1,  strc2,          stssrc3,  stffrc4      },
  { strd1,    steddddddderd2, strfffd3, ddddstrfffd4 }
}
oder so:

Code: Alles auswählen

{ 
  { stra1    , stra2          , stra3    , stra4        },
  { strdffb1 , strfffb2       , strb3    , strbff4      },
  { strssc1  , strc2          , stssrc3  , stffrc4      },
  { strd1    , steddddddderd2 , strfffd3 , ddddstrfffd4 }
}


Mit Regular expressions oder irgendwie in Matrix aufteilen.. ?

Danke im voraus
Zuletzt geändert von Francesco am Freitag 25. Juni 2010, 21:19, insgesamt 1-mal geändert.
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

Hallo,

ich denke die erste Frage ist erstmal
wo du das ganze ausgeben willst.

Wahrscheinlich ist das eine Datenstruktur die du in der Console ausgeben willst?

Würde mir jetzt nur einfallen mit \t (Tab) oder zählen und " " (Leerzeichen) "auffüllen"
einfallen, aber wie gesagt hängt das davon ab für welche Anzeige du das optisch aufwerten
willst.

Vielleicht stehe ich auch einfach nur auf dem Schlauch.

Grüße
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Da habe ich mich zu knapp ausgedrückt. Es ist eine Datei, den Inhalte möchte ich auslesen und wieder so geändert zurückschreiben. irgendwie müsste ich immer die hinterste mögliche position feststellen, und die anderen (in diesem Fall nach dem Trenner ',') auf dieses letzte ausrichten (mit spaces auffüllen).

Es sollte den code "beautifien", wie es auch bestandteil zB von astyle, crustify (universalindengui oder wie das schnell hieß) ... ist.

Das wiederrum sollte eine kleines Script in DrPython sein, das ich an der Selektion an einer geladenenen Datei durchführen möchte. Dabei möchte ich den Text der markierten Teil der Datei entsprechend ausrichten.

Nachtrag:
* Das ganze soll ohne einfügen von Tabs sein
* wäre schön, wenn man das universeller lösen kann (also dass er auch = ausrichtet)
z.B.:

Code: Alles auswählen

abc = 17
c = 18
wird zu

Code: Alles auswählen

abc = 17
c   = 18
[/size]
Zuletzt geändert von Francesco am Freitag 25. Juni 2010, 21:27, insgesamt 1-mal geändert.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Wenn du alle paar Minuten an deinen Beitrag noch neue Forderungen anhängst, machst du die Sache für andere nicht gerade einfacher ....

Nicht "universell", aber wenigstens eine Lösung für das ursprüngliche Problem:

Code: Alles auswählen

s = """{
  { stra1 , stra2,   stra3 , stra4 },
  { strdffb1 , strfffb2,   strb3 , strbff4 },
  { strssc1 , strc2  ,  stssrc3 , stffrc4 },
  { strd1, steddddddderd2,   strfffd3 , ddddstrfffd4 }
}"""

rows = [[item.strip()+", " for item in line.strip(", {}").split(",")]
        for line in s.splitlines()[1:-1]]
widths = [max(map(len,column)) for column in zip(*rows)]
result = "{\n" + ",\n".join("  { "+("".join(item.ljust(widths[k])
        for k,item in enumerate(row))).strip(" ,")+" }" for row in rows) + "\n}"
print result
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

numerix hat geschrieben:Wenn du alle paar Minuten an deinen Beitrag noch neue Forderungen anhängst, machst du die Sache für andere nicht gerade einfacher ....
Ja, *blush*, war ein bisschen übertrieben :)
numerix hat geschrieben:Nicht "universell", aber wenigstens eine Lösung für das ursprüngliche Problem:
(code ...)
Vielen Dank für den Code. Den muss ich einmal "entschlüsseln". ;)
Antworten