Thread Formatstring und Argumente für sprintf vorberechnen (11 answers)
Opened by pinwheel at 2020-01-05 01:13

Linuxer
 2020-01-05 02:27
#191061 #191061
User since
2006-01-27
3890 articles
HausmeisterIn

user image
Hallo,

Mein erster Gedanke war, die Format-Definition zusammen mit der Definition welche Spalten jeweils auszugeben sind, in einem Hash vorzudefinieren.

Schema:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
my %formats = (
   "format name 1" => {
       "format" => "%02d %02d",
       "fields" => [ "a", "b" ],
   },
   "format name 2" => {
       "format" => "%03s %02d",
       "fields" => [ "c", "d" ],
   },

);


Und dann in den Funktionen darauf zurückzugreifen.
Das hätte den Vorteil, dass Du die Definitionen der Formate und der Datenfelder an einem zentralen Ort hättest.
Wenn Du aber Daten aus mehreren Daten-Hashes verarbeiten willst, stößt das vielleicht schnell an seine Grenzen oder wird seinerseits wieder unübersichtlich...

Aber ich vermute(!), dass diese Maßnahme nicht wirklich Zeitgewinn bringt. Es würde wahrscheinlich eher der Übersichtlichkeit dienen, die Formatierungen an einer zentralen Stelle zu haben.

Wenn Du die Fallunterscheidung sparen willst, wäre es wohl sinnvoller, die Daten-Hashes zu vereinheitlichen und ggfs. sogar vor der finalen Verarbeitung zusammenzuführen, sodass alles in einem Hash vorliegen kann.


Ein anderer Gedanke stellt die Frage, liegt das Zeitproblem wirklich in der Fallunterscheidung selber:

  • Hast Du bereits ein Profiling des Programms erstellt?
  • Wird die Zeit wirklich durch die Fallunterscheidung selber verbrannt?
  • Oder vielleicht in den get_line_
  • Routinen selber und deren Handhabung?
  • Oder vielleicht auch beim Einlesen der Millionen von Datensätzen?

Weitere Gedanken:
  • Mag sein, dass es im produktiven Code mehr Gründe dafür gibt, aber erst in einer Subroutine mit sprintf einen (möglicherweise sehr langen und komplexen) String aufbauen zu lassen, diesen zurückzugeben und dann erst mit print auszugeben, erscheint mir unvorteilhaft. Warum die Ausgabe nicht gleich in der Routine mit printf erledigen lassen? Das "\n" kann auch gleich ins Format eingebaut werden.
  • Wenn der zurückzuliefernde String sehr lang ist, könnte es vielleicht sinniger sein, eine Referenz auf einen Skalar zu übergeben, in diesen dann den String zu speichern. Damit könnte man sich das Zurückgeben sparen und nach dem Routinenaufruf mit dem Skalar weiterarbeiten.


Soweit meine etwas müden Gedanken dazu.

Gute Nacht ;-)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Formatstring und Argumente für sprintf vorberechnen