Font
[thread]7583[/thread]

Formatierte Ausgabe

Readers: 3


<< |< 1 2 >| >> 12 entries, 2 pages
fritz
 2006-01-02 10:53
#61427 #61427
User since
2005-10-19
44 articles
BenutzerIn
[default_avatar]
Hi, liebe Perlgemeinde, ein frohes neues Jahr wuensch ich euch allen.

Nun zu meinem Problem

Um gleichzeitig in einer Funktion ( die heisst bei mir Output() ) die Bildschirmausgabe und das Schreiben in ein File zu realisieren uebergebe ich die zu schreibenden Werte an die Funktion.

z.B. Output("Identify the device");

Die Funktion Output sieht so aus:

sub Output
{
$string = shift;

printf "$string\n";

StringFileBuilder($string);
}

StringFileBuilder eine Funktion die mir das File erstellt.

Das funktioniert auch alles wunderbar NUR...

Ich wuerde auch gern eine formatierte Ausgabe erzeugen also z.B. Hexwerte ausgeben wie es z.B. printf kann.

also
printf( "%04x", $device{ram_start});

Ausgabe: FFFF;

Ich muesste also

Output( "%04x", $device{ram_start});

schreiben nur das haut leider nicht so hin wie ich mir das vorstelle.
Als Ausgabe bekomme ich nun natuerlich 0000, und $device{ram_start}); wird nicht beruecksichtigt weil ich ja nur einmal shifte.

Gibt es eine Moeglichkeit einen String an die Funktion zu uebergeben (z.B. "%04x", $device{ram_start};) und diesen dann in der Funktion mit printf ausfzufuehren sodass er mir das richtige ausgibt?


Hoffe ihr habt alle das Problem verstanden und antwortet mir bald
sesth
 2006-01-02 10:56
#61428 #61428
User since
2005-02-01
181 articles
BenutzerIn
[default_avatar]
Es sollte mit
Code: (dl )
printf OUT "%04x", $device{ram_start};

klappen. OUT ist dabei ein geöffnetes File-Handle.
Gruß
Thomas
fritz
 2006-01-02 11:01
#61429 #61429
User since
2005-10-19
44 articles
BenutzerIn
[default_avatar]
Weiss jetzt nicht genau was du meinst das klappen soll.

Das File kann ich schon erzeugen und das Problem das ich habe ist das ich eine formatierte Ausgabe erzeugen will.

Sowohl in dem File als auch auf dem Bildschirm
Relais
 2006-01-02 11:35
#61430 #61430
User since
2003-08-06
2239 articles
ModeratorIn
[Homepage] [default_avatar]
[quote=fritz,02.01.2006, 09:53]Ich muesste also

Output( "%04x", $device{ram_start});

schreiben nur das haut leider nicht so hin wie ich mir das vorstelle.
Als Ausgabe bekomme ich nun natuerlich 0000, und $device{ram_start}); wird nicht beruecksichtigt weil ich ja nur einmal shifte.[/quote]
Du übergibst zwei Strings, holst aber nur einen ab.
Quote
Gibt es eine Moeglichkeit einen String an die Funktion zu uebergeben (z.B. "%04x", $device{ram_start};) und diesen dann in der Funktion mit printf ausfzufuehren sodass er mir das richtige ausgibt?

Nun ja, es gibt die verschiedensten Möglichkeiten, darunter etwa an die Funktion
- einen String zu übergeben (woran Du denkst)
- zwei Strings zu übergeben (was Du tust)
- beliebig viele Strings zu übergeben.

Weiterhin gibt es die Möglichkeit in der Funktion
- einen String anzunehmen (was Du tust)
- zwei Strings anzunehmen (was Du tun solltest)
- beliebig viele Strings anzunehmen (was am flexibelsten wäre)

Quote
Hoffe ihr habt alle das Problem verstanden und antwortet mir bald


Du übergibst 2 Strings.
Du nimmst nur einen an.

Dein Problem kann ich nur an dem erkennen, wie es in Deinem Text herüberkommt, und da sieht es so aus, als seiest Du davon überzeugt, nur einen String zu übergeben, während Du allerdings zwei übergibst.

In Deinem Beispiel
Quote
Output( "%04x", $device{ram_start} );
ist das so. Das Komma trannt hier den ersten vom zweiten String. Nimm einfach beide in Deiner Funktion an. Dazu kannst Du außer der shift-Funktion vielleicht besser das Array @_ direkt verwenden?
Erst denken, dann posten -- Frankfurt.pm-Treffen am Dienstag 07.01.2020 im Café Diesseits
22. Deutscher Perl-Workshop 04. bis 06.03.2020 in Erlangen.
Frankfurt Perl-Workshop 2020-1 ca. Mai-Juni 2020 im Haus der Jugend

Winter is Coming
fritz
 2006-01-02 11:42
#61431 #61431
User since
2005-10-19
44 articles
BenutzerIn
[default_avatar]
Danke schon mal fuer die Antwort.

Das ich nur einen String annehme ist mir klar.
Das Problem was ich habe ist das ich ja nicht genau weiss was ich fuer Parameter ich bekomme und wieviel es sind.

So kann es z.B. nur ein Parameter sein wie z.B Output("Identify the device");

Es kann aber auch sein das ich mehrere Parameter uebergeben muss.
z.B. Output (' " RAM : %04x-%04x\n" , $device{ram_start} ,$device{ram_end}');

Jetzt hab ich mir gedacht ich uebergebe alles als nur einen String und verarbeite ihn dann mit printf; In der Funktion kommt dann " RAM : %04x-%04x\n" , $device{ram_start} ,$device{ram_end} als string an.

Die Frage ist also, was mache ich mit dem einen String das ihn printf richtig verarbeitet und gleichzeitig aber normale Strings ohne formatierte Ausgabe ebenfalls verarbeitet.
pq
 2006-01-02 12:24
#61432 #61432
User since
2003-08-04
12204 articles
Admin1
[Homepage]
user image
du suchst sprintf().
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
fritz
 2006-01-02 13:33
#61433 #61433
User since
2005-10-19
44 articles
BenutzerIn
[default_avatar]
Mit dem hab ich es auch schon probiert, hast du vielleicht ein kurzes Beispiel Programm wie du das machen wuerdest.
esskar
 2006-01-02 13:45
#61434 #61434
User since
2003-08-04
7321 articles
ModeratorIn

user image
Code: (dl )
1
2
3
4
5
6
7
8
sub Output
{
my $string = sprintf(@_);

print "$string\n";

StringFileBuilder($string);
}


btw.
Code: (dl )
1
2
use strict;
use warnings;
pq
 2006-01-02 13:46
#61435 #61435
User since
2003-08-04
12204 articles
Admin1
[Homepage]
user image
[quote=fritz,02.01.2006, 12:33]Mit dem hab ich es auch schon probiert, hast du vielleicht ein kurzes Beispiel Programm wie du das machen wuerdest.[/quote]
ja, was hast du denn probiert?

Output(sprintf "%...", $arg);
vielleicht verstehe ich aber auch dein problem nicht...
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
fritz
 2006-01-02 13:49
#61436 #61436
User since
2005-10-19
44 articles
BenutzerIn
[default_avatar]
@esskar
Hab das grad probiert aber ich krieg ja so nur die Anzahl der Parameter also $string = 1 oder 2 oder so.

@pq:

hab jetzt folgendes probiert

Output(sprintf (" RAM2 : %04x-%04x\n" , $device{ram2_start},$device{ram2_end}));

Leider werden die %04x nicht mit den Werten verarbeitet, sprich ich habe dann 0000 - 0000.\n\n

<!--EDIT|fritz|1136202884-->
<< |< 1 2 >| >> 12 entries, 2 pages



View all threads created 2006-01-02 10:53.