Wie "pad" eine Zeichenfolge variabler Länge haben eine ausgerichtete letzten Spalte
Habe ich eine Eingabe im folgenden format:
09:08:11 XXXXXXXXXXXXX 1.1.1.1
09:09:03 YYYYYYYY 2.2.2.2
09:12:37 ZZZZ 3.3.3.3
Ich bin in der Lage, extrahieren Sie diese Individuen Felder einfach mit der regex /(\S+)\s+(\S+)\s+(\S+)\s+/
. Ich benannte Sie $time
, $name
, und $number
. Mein problem ist, ich möchte die Anzeige so, dass die $number
richtet perfekt. Da die $name
beliebig lang sein können, was ist die beste Lösung für dieses?
Ich würde gerne die Ausgabe wie folgt Aussehen. Bitte beachten Sie, dass ich hatte, um Punkte für das ausrichten des letzten Feldes, da war ich nicht in der Lage, verwenden Sie die Leertaste, um dies zu tun, nicht sicher, warum. Anyhoo.
09:08:11 XXXXXXXXXXXXX 1.1.1.1
09:09:03 YYYYYYYY 2.2.2.2
09:12:37 ZZZZ 3.3.3.3
Dachte ich über das setzen der $name
in ein array. Und dann eine Funktion zu finden, die mit der längsten Anzahl Zeichen. Schließlich würde ich die Pads aus dem kürzeren Namen übereinstimmen, den längsten Namen. Gibt es eine bessere und effizientere Methode, dies zu tun?
Ich war nur zu machen diese zu Bearbeiten auf meinem Handy, bis ich merkte, es war zu schwierig.
Sind die zahlen immer eine Ziffer pro? Wenn nicht, was möchten Sie tun?
Vielen Dank für den edit. Gut zu wissen ich hinzufügen kann, die Leerzeichen in den code-option.
InformationsquelleAutor qdog | 2009-10-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für die Formatierung, versuchen Sie es mit der sprintf Funktion, wie in
(das Minuszeichen bedeutet Linksbündig)
InformationsquelleAutor Jim Garrison
Es wurde von jemand hier:
Können Sie ändern, Variablen-Namen, und es sollte für Sie arbeiten.
InformationsquelleAutor Ashwin
Haben Sie einen Blick auf Perl6::Form.
Dieser Ansatz wird empfohlen, über die Verwendung format. Siehe diesen früheren Stack Overflow Antwort: Welche anderen Sprachen haben Eigenschaften und/oder Bibliotheken, die ähnlich wie Perl-format?
Hier ist ein Beispiel, Perl6::Form tut genau das, was Sie wollen, mit Ihren Daten:
NB. Wenn Ihre Daten Felder immer größer als die form-Felder angegeben, dann läuft man in Probleme mit der Formatierung (und das gleiche gilt auch für die sprintf-und format-Lösungen).
Es ist einfach zu beheben, je nachdem, was Ihre Ausgabe-Anforderungen sind. Zum Beispiel, wenn Sie pflegen wollen, ist die tabellarische Stabilität dann...
...word wickeln Sie jede Spalte für Sie.
InformationsquelleAutor draegtun
Wenn Sie nicht wissen, die maximale Breite des mittleren Feldes, haben Sie, um zwei Durchgänge über die Daten als @ijw Noten.
InformationsquelleAutor Sinan Ünür
Was auch immer Sie tun, Sie gehen zu müssen, zu tun mit zwei Durchgängen zu finden, die Länge, die man zum drucken verwenden, die Länge der Formatierung. Ich würde mit dem sprintf Antwort bereits gegeben, für die Formatierung, persönlich, nur die Variation der Anzahl.
Genau, wie Sie die zwei Durchgänge hängt eher davon ab, wo die Daten herkommen - Lesen einer Datei zweimal könnte klüger sein, als der Vorverarbeitung in den Arbeitsspeicher, wenn die Datei riesig ist, aber die array-Lösung, die Sie vorschlagen, klingt gut für mich.
InformationsquelleAutor ijw
So, in obigem Beispiel, "$lineLength" ist nach rechts verschoben mit führenden Leerzeichen.
InformationsquelleAutor James Burchell