Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen) (https://www.delphipraxis.net/171663-mehrere-strings-einen-string-vereinen-mit-fixer-laenge-festen-positionen.html)

Sir Rufo 18. Nov 2012 02:52

AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)
 
@himitsu 5. bis 33. Stelle sind 29 Zeichen und nicht 28 ;)
36. bis 40. Stelle sind ja auch 5 Zeichen ;)

Somit sind es 39 Zeichen die er beschrieben hat, aber er hat sich mit der 34. Stelle vertan und unter den Tisch fallen lassen ;)
und dann sind es 40

himitsu 18. Nov 2012 03:03

AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)
 
Sag ich ja :mrgreen:

Zitat:

3 + 1 + 28 + 1 + 5 = 38
In #1 hatte ich 29 ausgerechnet, aber auch das reicht noch nicht.
Aber hier in den Codes verwenden alle 28 :zwinker: (vermutlich ein Copy&Paste-Error, ausgehend von #2)
Die 29 hatte ich mir auch ausgerrechnet.
Aber dennoch fehlt ein Zeichen (die 34), da er ja 40 Zeichen haben will.

3 + 1 + 29 + 1 + 5 = 39

Helmi 18. Nov 2012 10:18

AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)
 
Zitat:

Zitat von himitsu (Beitrag 1191781)
Delphi-Quellcode:
result := Format('%-3.3s %-28.28s %-5.5s', [S_Linie, S_Ziel, S_Laenge]);


Für Strings (%s) :
- = Linkbündig
*. = Minimallänge (aufgefüllt mit Leerzeichen)
.* = Maximallänge (mehr wird abgeschnitten)

Danke für die Erklärung - irgendwie ist die Hilfe da nicht so präzise

Zitat:

Zitat von himitsu (Beitrag 1191781)
Aber was soll eigentlich ein Argumentfehler sein?

Ok - das war etwas laienhaft ausgedrückt.



Zitat:

Zitat von himitsu (Beitrag 1191781)
Zitat:

Delphi-Quellcode:
  SetLength(S_Text, 40);
  S_Text := StringOfChar(#32, length(S_Text));

Das ist ein klein bissl sinnlos/doppeltgemoppelt. :zwinker:
Delphi-Quellcode:
  S_Text := StringOfChar(#32, 40);

Ja und Nein! - Ich gib gern Längen nur einmal an. Wenn ich die Länge dann verändere, verändert sich automatisch alles mit.
(Ok - da es hier genau 40 sind, hätte man auch 40 reinschreiben können)

Zitat:

Zitat von himitsu (Beitrag 1191781)
3 + 1 + 28 + 1 + 5 = 38
In #1 hatte ich 29 ausgerechnet, aber auch das reicht noch nicht.

Ich muss gestehen - ich hab mich selbst verhaut - ich bin auch auf weniger Stellen gekommen, als ich wollte.
Habs dann erst bemerkt, als ich den String an ein LCD-Modul gesendet hatte (daher auch die 40 = max. Zeichen pro Zeile)
(Man sollte so spät nicht mehr rechnen)

Zitat:

Zitat von himitsu (Beitrag 1191781)
Ach ja, du kannst deine Variable "Länge" jetzt auch
Delphi-Quellcode:
S_Länge
nennen. :angle:

Das ist mir bekannt - aber ich kann mich damit nicht anfreunden - ich bleib lieber bei ae, ue oder oe

Zitat:

Zitat von himitsu (Beitrag 1191781)
Und wieso sind Linie und Länge eigentlich keine Integer? :angle2:

"Linie" und "Länge" werden aus einer StringGrid-Zeile gelesen. Daher der String.
Da ich es weiter dann auch als String benötige, wandle ich es nicht unnötigerweise erst in einen Integer.

Auserdem ist Linie keine Zahl - sondern eine Linien-Angabe einer U-Bahn :-)

Sir Rufo 18. Nov 2012 10:48

AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)
 
Passt jetzt zwar nicht zu der Ausgangs Problematik, aber mir sträuben sich gerade alle Nackenhaare bei:
Zitat:

Zitat von Helmi (Beitrag 1191800)
"Linie" und "Länge" werden aus einer StringGrid-Zeile gelesen. Daher der String.
Da ich es weiter dann auch als String benötige, wandle ich es nicht unnötigerweise erst in einen Integer.

Auserdem ist Linie keine Zahl - sondern eine Linien-Angabe einer U-Bahn :-)

Das macht man doch nicht. Hierfür würde sich perfekt das Visitor-Pattern von Uwe Raabe anbieten.

Basierend auf der unit aus diesem Artikel sieht das dann so aus:
Delphi-Quellcode:
uses
  ..., uVisitor;

type
  TSubway = class
    property Line : string;
    property Destination : string;
  end;

  TSubwayArrival = class
    property Subway : TSubway;
    property ArrivalAt : TDateTime;
  end;

  // Der Einfachheit halber wird hier nur in eine Variable geschrieben
  // Es könnte aber auch direkt die Ausgabe an das LCD-Modul erfolgen
  // Oder an eine Klasse, die das LCD-Modul selber betreut :o)
  TLCDVisitor = class( TVisitor )
  private
    FLine : string;
  public
    property Line : string read FLine;
  published
    procedure VisitSubwayArrival( Instance : TSubwayArrival );
  end;

procedure TLCDVisitor.VisitSubwayArrival( Instance : TSubwayArrival );
begin
  FLine := { hier jetzt der Code um die Instanz auszugeben }
end;
und diesen Visitor hat man im 0, auch um weitere Klassen erweitert, um auch diese auf dem LCD darstellen zu können.

Ja und der Aufruf sieht dann immer so aus (egal welche Instanz und welche Klasse auch immer):
Delphi-Quellcode:
MyLCDVisitor.Visit( SomeInstance );

Helmi 18. Nov 2012 10:54

AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)
 
Zitat:

Zitat von Sir Rufo (Beitrag 1191804)
Passt jetzt zwar nicht zu der Ausgangs Problematik, aber mir sträuben sich gerade alle Nackenhaare bei:

Was ist jetzt daran so schlimm?
Ich lese den Inhalt eine Zelle aus, der als String vorliegt und in eine String-Variable geschrieben wird - was ist daran jetzt auf einmal so verwerflich?
Seit wann darf man das nicht mehr?

Sir Rufo 18. Nov 2012 11:39

AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)
 
Zitat:

Zitat von Helmi (Beitrag 1191805)
Zitat:

Zitat von Sir Rufo (Beitrag 1191804)
Passt jetzt zwar nicht zu der Ausgangs Problematik, aber mir sträuben sich gerade alle Nackenhaare bei:

Was ist jetzt daran so schlimm?
Ich lese den Inhalt eine Zelle aus, der als String vorliegt und in eine String-Variable geschrieben wird - was ist daran jetzt auf einmal so verwerflich?
Seit wann darf man das nicht mehr?

Seit dem man nicht mehr mit dem Foto des Geldscheins bezahlen darf :mrgreen:

Uwe Raabe 18. Nov 2012 12:27

AW: mehrere Strings in einen String vereinen (mit fixer Länge + festen Positionen)
 
Zitat:

Zitat von himitsu (Beitrag 1191781)
Für Strings (%s) :
- = Linkbündig
*. = Minimallänge (aufgefüllt mit Leerzeichen)
.* = Maximallänge (mehr wird abgeschnitten)

[/QUOTE]

Stimmt! Damit kann man das auch noch einfacher schreiben und StrUtils weglassen:

Delphi-Quellcode:
result := Format('%-3.3s %-29.29s %-5.5s', [a, b, c]);


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:38 Uhr.
Seite 2 von 2     12   

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