![]() |
Ausgabe (Text) automatisch unterstreichen lassen?
Guten Abend liebes Forum,
im Rahmen des Informatikunterrichtes bin ich auf eine Problemstellung gestoßen, wo ich keinen Ansatz für finde. Das Problem bezieht sich auf eine Konsolen-Anwendung. Es geht im speziellen um eine Text-Ausgabe, die automatisch unterstrichen werden soll. Bisher programmierten wir das immer wie folgt:
Delphi-Quellcode:
halt ganz primitiv und einfach, aber leider nicht automatisch sondern programmiert.
writeln(' Testueberschrift');
writeln(' ----------------'); Nun habe ich schon überlegt, ob man das vielleicht mit einer If-Then-Else Anweisung machen könnte. Quasi wenn Text vorhanden, dann writeln(' ------------'); sonst mache nichts oder sowas in der Art. Leider habe ich auch im Internet keinerlei Informationen darüber gefunden wie man das Automatisieren könnte. Um Rat und/oder Lösungsansätzen wäre ich euch sehr dankbar. Beste Grüße und noch einen schönen Abend. coly546 |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Du bastelst dir einfach eine eigene WriteLn-Funktion ;) Diese Funktion bricht den Text auf Konsolenbreite um und schreibt nacheinander erst Text, Unterstreichung, Text, Unterstreichung usw.
|
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Hallo,
danke erstmal für Ihre Antwort. Kann es sein das es dann immer noch nicht automatisch ist? Es kann auch gut sein, dass ich mich gerade ein bisschen bedeppert anstelle. Dann berichtigen Sie mich bitte. Wenn ich Sie richtig verstanden habe sollte, dass dann in etwa so aussehen:
Delphi-Quellcode:
Nur dann wäre es ja immer noch nicht automatisch?
writeln('Text.....................bis auf die Konsolenbreite');
writeln('---------------------------------------------------'); writeln('Text.....................bis auf die Konsolenbreite'); writeln('---------------------------------------------------'); writeln('Text.....................bis auf die Konsolenbreite'); writeln('---------------------------------------------------'); writeln('Text.....................bis auf die Konsolenbreite'); writeln('---------------------------------------------------'); //und so weiter //Add Mir ist gerade noch was eingefallen. Wäre es vielleicht möglich mit Hilfe von einer If-Then-Else-Anweosung das zu gestallten? Sprich wenn writeln da steht, dann schreibe('----------'), sonst mache nichts. |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Die Idee ist folgende...
Delphi-Quellcode:
Gruss
procedure MyWriteLn(text:string);
var i:byte; begin writeln(text); for i:=1 to length(text) do write('-'); writeln; end; Thorsten |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Hallo Thorsten,
danke für deine super Idee :-D Ähm...das Problem ist nur das er mir nicht die vollständige Überschrift unterstreicht. :?
Delphi-Quellcode:
program Project;
{$APPTYPE CONSOLE} uses SysUtils; var text:string; //001----Procedure-------Anfang-------------- procedure MyWriteLn(text:string); var i:byte; begin writeln('DasisteineUeberschrift'); for i:=1 to length(text) do write('-'); writeln; end; //001----Procedure--------Ende---------------- //-------Hauptprogramm----Anfang-------------- begin MyWriteLn('text:string'); readln; end. //-------Hauptprogramm----Ende---------------- Gruß coly546 |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Delphi-Quellcode:
program Project;
{$APPTYPE CONSOLE} uses SysUtils; //001----Procedure-------Anfang-------------- procedure MyWriteLn(text:string); var i:byte; begin writeln(text); for i:=1 to length(text) do write('-'); writeln; end; //001----Procedure--------Ende---------------- //-------Hauptprogramm----Anfang-------------- begin MyWriteLn('DasisteineUeberschrift'); readln; end. //-------Hauptprogramm----Ende---------------- |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Oh, dann lag es nur an meiner Unfähigkeit.
Vielen Dank, schön das hier auch Anfänger geholfen wird. Danke! |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Zitat:
|
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Zitat:
|
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Profi erwischt, da haben wir es wieder. :thumb: :wink:
|
Ein weiteres kleines Problem
Hi,
ich möchte meine automatische Text-Unterstreichung noch etwas verfeinern. Und zwar sollte man auch den "Freiraum" vor der Überschrift frei bestimmen können. Dazu habe ich die Prozedur wie folgt erweitert:
Delphi-Quellcode:
program textautomatischunterstreichen2;
{$APPTYPE CONSOLE} uses SysUtils; //001----Procedure-------Anfang-------------- procedure MyWriteLn(leer,text:string); var i:byte; begin write(leer); writeln(text); for i:=1 to length(leer) do write(#32); for i:=1 to length(text) do write(#196); writeln; end; //001----Procedure--------Ende---------------- //-------Hauptprogramm----Anfang-------------- begin MyWriteLn(' ','DasisteineUeberschrift'); readln; end. //-------Hauptprogramm----Ende---------------- So weit so gut, allerdings möchte ich anstelle von den in der Zeile 23:
Delphi-Quellcode:
verwendeten Leerzeichen via Tastatur, eine "Zählschleife" verwenden.
MyWriteLn(' ','DasisteineUeberschrift');
Als ich nun die besagte Zeile 23 gegen diese:
Delphi-Quellcode:
mit "Zählschleife" ersetzte, wollte er das Programm nicht mehr compilieren.
MyWriteLn(for i:=1 to 20 do write(#32),'DasisteineUeberschrift');
Jetzt stellt sich für mich die Frage, was ich machen kann damit es auch mit einer "Zählschleife" funktioniert. freundliche Grüße coly546 |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Moin, Moin,
die Schleife muss in die Prozedur, du übergibst nur die Schleifenobergrenze als Integer (oder Byte). |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Wie wär's damit:
Delphi-Quellcode:
Writeln(StringOfChar(#32, i), myString);
Writeln(StringOfChar(#32, i), StringOfChar('_', Length(myString)); |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Schön, damit ist's einfacher
- ich gehe aber davon aus, dass es coly546 primär um das "Selberbauen" geht. |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Ja, ähm, glaub ich ja auch. Ein anderer Vorschlag: Bau deine MyWriteln-Function doch so um, dass du ihr einfach nur die Länge des Leerstrings an Stelle des Strings selbst übergibst.
[Edit] Mit Leerstring meine ich natürlich nicht '', sondern einen String aus Leerzeichen :zwinker: [/Edit] |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Zitat:
die ich im Moment auch verstehe "durchfummeln". Trotzdem danke tomsel. Wenn ich die Schleife in die Prozedur mache, befindet sich der Strich aber am linken Bildrand.
Delphi-Quellcode:
//001----Procedure-------Anfang--------------
procedure MyWriteLn(leer,text:string); var i:byte; begin for i:=1 to 20 do write(#32); writeln(text); for i:=1 to length(leer) do write(#32); for i:=1 to length(text) do write(#196); writeln; end; //001----Procedure--------Ende---------------- //-------Hauptprogramm----Anfang-------------- begin MyWriteLn('','DasisteineUeberschrift'); readln; end. //-------Hauptprogramm----Ende---------------- Ich müsste das glaube so machen, dass er nochmal die selbe Anzahl für die Leerzeichen wie oben angegeben, für die Anzahl der Leerzeichen verwendet für den Bereich vor den Strichen (#196). Dann müsste es ja so aussehen:
Delphi-Quellcode:
//001----Procedure-------Anfang--------------
procedure MyWriteLn(leer,text:string); var i:byte; begin for i:=1 to 20 do write(#32); writeln(text); for i:=1 to length(text) do write(#196); for i:=1 to length(leer) do write(#32); writeln; end; //001----Procedure--------Ende---------------- //-------Hauptprogramm----Anfang-------------- begin MyWriteLn('','DasisteineUeberschrift'); readln; end. //-------Hauptprogramm----Ende---------------- Nur irgendwie geht das trotzdem nicht. :wall: Zitat:
|
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Delphi-Quellcode:
Siehe Kommentare oben, was fällt dir da auf? :zwinker:
//001----Procedure-------Anfang--------------
procedure MyWriteLn(leer,text:string); var i:byte; begin for i:=1 to 20 do write(#32); writeln(text); // hier schreibst du 20 Leerzeichen for i:=1 to length(leer) do // hier verwendest du statt 20 die Länge von leer write(#32); for i:=1 to length(text) do write(#196); writeln; end; //001----Procedure--------Ende---------------- //-------Hauptprogramm----Anfang-------------- begin MyWriteLn('','DasisteineUeberschrift'); // als leer übergibst du hier einen String der Länge 0 readln; end. //-------Hauptprogramm----Ende---------------- |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Nun, du bist der Lösung ja schon sehr nah! Du musst die Unterstreichung genau so beginnen wie die Textausgabe. Also: Zuerst Leerzeichen, dann Text, noch 'mal Leerzeichen, dann Unterstriche. Die Zahl der Leerzeichen übergibst du der Prozedur, also in etwa so
Delphi-Quellcode:
procedure MyWriteln(AnzLeerzeichen:Byte;Text:String);
var i : Byte; begin for i:=1 to AnzLeerzeichen do write(' '); writeln(Text); for i:=1 to AnzLeerzeichen do write(' '); for i:=1 to length(Text) do write('-'); end; |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Musst du alles ausplaudern? Er wollte doch selber denken. :mrgreen:
|
Re: Ausgabe (Text) automatisch unterstreichen lassen?
:oops: Na, manchmal ist ein kleiner Schubs auch nicht schlecht, dann ist der Kopf für die nächste Herausforderung frei. Wenn man zu lange an einer Stelle herumdoktert ist das auch nicht motivierend. Schwer einzuschätzen, wann so ein Zeitpunkt erreicht ist. Grundsätzlich gebe ich dir Recht!
|
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Achso, ich dachte man kann das irgendwie kombinieren.
Also ein mal i:=1 to 20 und wenn man es an anderer Stelle mit der Längen-Berechnung besser findet, verwendet man halt diese wieder. Wieder was gelernt. Vielen Dank an alle Beteiligten. |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Na klar, geht das auch!
Du schreibst einfach eine Funktion, die dir einen String aus einer bestimmten Anzahl von Zeichen zurückgibt - und dann sind wir wieder beim Hinweis von tomsel: Du hättest dir dann deine eigene (spezielle) StringOfChar()-Funktion erstellt! |
Re: Ausgabe (Text) automatisch unterstreichen lassen?
Hmm..ok,
aber als verständlicher (für mich) sehe ich die Lösung an, wo oben ausschließlich length von etwas verwendet wurde:
Delphi-Quellcode:
procedure MyWriteln(AnzLeerzeichen:Byte;Text:String);
var i : Byte; begin for i:=1 to AnzLeerzeichen do write(' '); writeln(Text); for i:=1 to AnzLeerzeichen do write(' '); for i:=1 to length(Text) do write('-'); end; schön Tag noch :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz