Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Konsolenanwendung: Leerzeichen minus String rechnen. (https://www.delphipraxis.net/121978-konsolenanwendung-leerzeichen-minus-string-rechnen.html)

coly546 7. Okt 2008 20:17


Konsolenanwendung: Leerzeichen minus String rechnen.
 
Hi,
ich habe folgende Tabelle "gestaltet":

Delphi-Quellcode:
Procedure P_Stunden_ausgeben;
var
  i: Integer;

begin
//1. Zeile
write('   ');write(#218);for i:=1 to 50 do write(#196);writeln(#191);
//2. Zeile
write('   ');write(#179);write(' STUNDENPLAN:');for i:=1 to 37 do write(' ');
writeln(#179);
//3. Zeile
write('   ');write(#179);for i:=1 to 14 do write(' ');write(#218);
for i:=1 to 10 do write(#196);write(#194);for i:=1 to 10 do write(#196);
write(#194);for i:=1 to 10 do write(#196);write(#194);
for i:=1 to 10 do write(#196);write(#194);for i:=1 to 10 do write(#196);
writeln(#191);
//4. Zeile
write('   ');write(#179);for i:=1 to 14 do write(' ');write(#179);
write('Montag');write('   ');write(#179);write('Dienstag');
write(' ');write(#179);write('Mittwoch');write(' ');write(#179);
write('Donnerstag');write('');write(#179);write('Freitag');
write('  ');writeln(#179);
//5. Zeile
write('   ');write(#179);for i:=1 to 14 do write(' ');write(#195);
for i := 1 to 54 do write(#220);writeln(#180);
//6. Zeile
write('   ');write(#179);for i:=1 to 14 do write(' ');write(#195);
for i:=1 to 10 do write(#196);write(#197);for i:=1 to 10 do write(#196);
write(#197);for i:=1 to 10 do write(#196);write(#197);
for i:=1 to 10 do write(#196);write(#197);for i:=1 to 10 do write(#196);
writeln(#180);
//7. Zeile
write('   ');write(#179);write(' 1. Stunde:');write('  ');write(#179);
write(Tag[1,1]);for i:=0 to [color=#ff0000]Anzahl_freier_Zeichen[/color]write(#179);


readln;

Das Problem ist, dass sich die Tabelle verzieht, sobald ein Feldinhalt bei zum Beispiel bei Montag(1.Stunde) größer als 10 Zeichen ist.
Ideal wäre, wenn ich den "Freiraum" berechen könnte. So das ich dann wo Anzahl_freier_Zeichen eine Variable hätte die immer die noch von 10 verbleibenden Zeichen angibt. Das habe ich auch schon mit folgender Prozedur probiert:

Delphi-Quellcode:
procedure P_Spalte(Text:String);
var i:Byte;


begin
 if Tag[1,1]=('') then
 for i:=1 to 10 do write(' ')
 else
 for i:=1 to (10-Anzleer) do write(' ');
end;

SirTwist 7. Okt 2008 20:33

Re: Konsolenanwendung: Leerzeichen minus String rechnen.
 
Zitat:

Zitat von coly546
Hi,
ich habe folgende Tabelle "gestaltet":

Huihuihuiui... also zu der write-Wüste: Guck Dir mal die Funktion StringOfChar() an, die liefert Dir einen String mit n-mal einem bestimmten Zeichen.

Ich habe Deinen Code nicht ausgeführt, aber ich denke mir, dass die vielen #xxx die Ecken und Linien einer Tabelle bilden.
Es würde da Sinn machen, sich die einzelnen Elemente vorher als Konstakte zu definieren
Delphi-Quellcode:
const
  RAHMEN_OL = #123;
  RAHMEN_O = #124;
  RAHMEN_OR = #125;
  RAHMEN_UL = #126;
  RAHMEN_U = #127;
  RAHMEN_UR = #128;
Dann solltest Du einen Rahmen auch mit der einfachen Anweisung
Delphi-Quellcode:
write(RAHMEN_OL + StringOfChar(50, RAHMEN_O) + RAHMEN_OR);
...
ausgeben lassen können.
(alles ungetestet, bitte selbst die richtigen Werte eintragen. Danke)

Gruß,
SirTwist

coly546 7. Okt 2008 20:41

Re: Konsolenanwendung: Leerzeichen minus String rechnen.
 
Hi,
danke für den Tipp, aber wir sollen das so machen :(

Primär geht es mir aber ehr um das Problem, wie ich folgendes umsetzen kann:
Es gibt Platz für 10 Zeichen, wenn 10 Zeichen verwendet werden, mache nichts,
sonst schreibe genau so viele Zeichen, sodass du den Platz für 10 Zeichen ausnutzt.

Könnte man vielleicht:

Delphi-Quellcode:
procedure P_Spalte(Text:String);
var i:Byte;
begin
for i:=0 to (10-(length(Eingabe)) do begin
write(' ');end;

für mein Problem verwenden?


//Edit
Ich habe es hinbekommen mit:

Delphi-Quellcode:
procedure P_Spalte(Text:String);
var i:Byte;
begin
for i:=0 to (9-(length(Eingabe)) do begin
write(' ');end;

SirTwist 7. Okt 2008 21:02

Re: Konsolenanwendung: Leerzeichen minus String rechnen.
 
Zitat:

Zitat von coly546
Hi,
danke für den Tipp, aber wir sollen das so machen :(

Euer Lehrer verbietet Euch, selbständig zu denken und bessere Lösungen zu erarbeiten? Gibst Du mir mal bitte dessen Mailadresse? *harhar*

Guck Dir mal Format('%-10.10s', [string]) an.

Gruß,
SirTwist

Klaus01 8. Okt 2008 08:01

Re: Konsolenanwendung: Leerzeichen minus String rechnen.
 
Zitat:

Zitat von coly546
Ich habe es hinbekommen mit:

Delphi-Quellcode:
procedure P_Spalte(Text:String);
var i:Byte;
begin
for i:=0 to (9-(length(Eingabe)) do begin
write(' ');end;

oder so:

Delphi-Quellcode:
const
  MaxSpalten = 10;
...

while length(Eingabe) < MaxSpalten do
  Eingabe := Eingabe + ' ';
Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz