Insert

Für Fragen von Einsteigern und Programmieranfängern...
Adenos
Beiträge: 67
Registriert: So 17. Okt 2021, 17:18
OS, Lazarus, FPC: Windows 7
CPU-Target: X86
Wohnort: Allgäu

Insert

Beitrag von Adenos »

nachdem das mit dem Sortieren jetzt wunderbar funktioniert, möchte ich meine Werte jetzt noch besser lesbar machen. In der Spalte stehen momentan Centbeträge, die ich wieder in Eurobeträge umwandeln möchte. Dafür brauche ich ja eigentlich nur ein Komma an der drittletzten Stelle einfügen. Ich wollte das mit der Insert-Funktion machen, aber da mache ich wohl was falsch:

Code: Alles auswählen

  Label1.Caption:=Insert(Label1.Caption,Length(Label1.Caption)-2,',');

Benutzeravatar
six1
Beiträge: 782
Registriert: Do 1. Jul 2010, 19:01

Re: Insert

Beitrag von six1 »

Es gibt eine Funktion zur Wandlung eines Float in einen String:
FloatToStrF(1000/100,fffixed,6,2);

Du müsstest die 1000 in obigem Beispiel durch deinen Integer Wert aus der Tabelle ersetzen.

Sicher gibt es viele weitere Beispiele dies zu lösen.
Gruß, Michael

Adenos
Beiträge: 67
Registriert: So 17. Okt 2021, 17:18
OS, Lazarus, FPC: Windows 7
CPU-Target: X86
Wohnort: Allgäu

Re: Insert

Beitrag von Adenos »

da in meinem Stringgrid Strings stehen, wäre es meiner Meinung nach das beste, an der drittletzten Stelle ein Komma einzufügen. Warum funktioniert denn das angefügte Beispiel nicht? Sicherlich könnte ich den Wert auch in ein Double umwandeln.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Insert

Beitrag von Winni »

Hi!

Wenn man die Syntax von Insert nicht beachtet, kann das nix werden:

Code: Alles auswählen

insert(EinfügString, ZielString, Position);
also in Deinem Fall:

Code: Alles auswählen

insert (',', Label2.caption, length(Label2.caption)-2);
Tipp: Nach der Eingabe von 'Insert' im Editor Strg-Leerzeichen einegeben, dann poppt die Syntax auf.

Winni

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Insert

Beitrag von theo »

Winni hat geschrieben:
Sa 22. Jan 2022, 15:17
Wenn man die Syntax von Insert nicht beachtet, kann das nix werden:
Stimmt! Darum funzt auch dein Beispiel nicht, "Zielstring" ist nämlich var! :lol:

Code: Alles auswählen

var S:String;
begin
  S:=Label1.Caption;
  Insert(',',S,Length(S)-2);
  Label1.Caption:=S;
end;
Es gibt dabei noch eine Merkwürdigkeit:
Wenn ich auf "insert" -> "Finde Deklaration von Insert" gehe, dann springt er auf TWinControl private:

Code: Alles auswählen

    procedure Insert(AControl: TControl; Index: integer);   
Nicht so gut, oder?
Lazarus 2.3.0 rmain-2_3-288-gd5fe15d448 FPC 3.2.2 x86_64-linux-gtk2

Adenos
Beiträge: 67
Registriert: So 17. Okt 2021, 17:18
OS, Lazarus, FPC: Windows 7
CPU-Target: X86
Wohnort: Allgäu

Re: Insert

Beitrag von Adenos »

jetzt mache ich es ganz ausführlich:

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
var
  S : String;
  x : integer;
begin
  S := Label1.Caption;
  x := Length(Label1.Caption);
  Label2.Caption := system.Insert(',', S, (x-2));
end;
aber Lazarus meldet bei dem Komma nach dem S: Syntax error, ")" expected but "," found

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Insert

Beitrag von theo »

Insert ist eine Prozedur und keine Funktion!
Es gibt keinen Rückgabewert, es wird nur die Variable S verändert. Label2.Caption :=Insert(..); geht nicht.
Ich habe dir oben doch gezeigt, wie es geht.

EDIT: Sorry, Adenos. Ich hatte oben auch einen Copy-Paste Fehler drin.
Jetzt ist es korrigiert.
Label1.Caption hat in der Prozedur nichts zu suchen.
Meine Bemerkung mit dem Rückgabewert ist aber trotzdem richtig.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Insert

Beitrag von Winni »

Adenos hat geschrieben:
Sa 22. Jan 2022, 15:51
jetzt mache ich es ganz ausführlich:

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
var
  S : String;
  x : integer;
begin
  S := Label1.Caption;
  x := Length(Label1.Caption);
  Label2.Caption := system.Insert(',', S, (x-2));
end;
aber Lazarus meldet bei dem Komma nach dem S: Syntax error, ")" expected but "," found
Ohh Kinners!


Wenn man nach "insert" Ctrl-Space haut, dann zeigt er einem an:

a) es ist eine procedure - und keine function
Deine Zuweisung ist also falsch.
Es muss heissen:

Insert (',',Label2.caption, length (Label2.caption )-2);

b) Und zu Theos Einwand:

Intrinsics wie Insert, copy etc sind inzwischen Doppel- bis Dreideutig:

a) Strings
b) dynamische Arrays
c) Componenten

Das ist auf der Ebene der Syntaxunterstützung im Editor anscheinend noch nicht sauber gelöst .

Winni

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Insert

Beitrag von theo »

Winni hat geschrieben:
Sa 22. Jan 2022, 16:38
Insert (',',Label2.caption, length (Label2.caption )-2);
Nö, eben nicht. Das gibt:
Error: Can't take the address of constant expressions
Wenn schon grosse Klappe, dann auch besser machen! :mrgreen:

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Insert

Beitrag von wp_xyz »

Winni hat geschrieben:
Sa 22. Jan 2022, 16:38
Es muss heissen:

Insert (',',Label2.caption, length (Label2.caption )-2);
Hey winni, nicht schon wieder Halbwahrheiten verbreiten. Der zweite Parameter muss "var" sein, und ein Property kann man nicht als "var" einsetzen. Warum liest keiner theo's Beitrag?

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Insert

Beitrag von Winni »

Hi!

Ahh, ich sehe, wo das Problem liegt.
Der Compiler ist wieder einmal zu doof, die Adresse einer property zu finden:

Code: Alles auswählen

 Error: Can't take the address of constant expressions
Korrrigieren wir Dein Beispiel:

Code: Alles auswählen

procedure TForm1.Button2Click(Sender: TObject);
var
  S : String;
  x : integer;
begin
  S := Label1.Caption;
  x := Length(Label1.Caption);
  Insert(',', S, (x-2));
Label1.Caption := s;
end;
Winni

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Insert

Beitrag von theo »

wp_xyz hat geschrieben:
Sa 22. Jan 2022, 16:46
Warum liest keiner theo's Beitrag?
Danke! Das habe ich mich schon oft gefragt. :wink:
Wenigstens weiss ich jetzt, dass meine Beiträge allgemein sichtbar sind.

Adenos
Beiträge: 67
Registriert: So 17. Okt 2021, 17:18
OS, Lazarus, FPC: Windows 7
CPU-Target: X86
Wohnort: Allgäu

Re: Insert

Beitrag von Adenos »

danke, jetzt geht es. Mein erstes Beispiel habe ich übrigens aus einem alten Delphi-Buch von Markt und Technik, aber das war wohl auch nicht vor Druckfehlern gefeit.

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Insert

Beitrag von Winni »

Hi!

Sorry - aber seht euch mal die Timestamps an:

Die Schreiberlinge arbeiten parallel und gehen so im nächsten Beitrag nicht auf den letzten ein, der kurz vorher erschienen ist. Das passsiert ncht das erste Mal im Forum und liegt in der Struktur ds Mediums.

@Adenos:Markt und Technik ist immer ein Qualitätssiegel für schrottige Software & Bücher, Nur übertroffen von Data Becker.

Winni

PS.: Bei M&T gibt's gerade günstig als Software: "3D Angeln"

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Insert

Beitrag von theo »

Winni hat geschrieben:
Sa 22. Jan 2022, 17:18
Sorry - aber seht euch mal die Timestamps an:
Tja, Erster ist Erster! Silber und Bronze sind auch schön, interessieren aber keinen! :lol:

Nee Quatsch, aber die Forensoftware warnt dich, wenn zwischenzeitlich eine anderer Kommentar geschrieben wurde.
Also was du schreibst, stimmt so nicht ganz.

Antworten