Zuweisung klappt nicht (Memo)

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Zuweisung klappt nicht (Memo)

Beitrag von gillian_x »

Hallo,

ich habe folgendes Problem:

Ich möchte eine bestimmte Zeile aus einem Memo einer Variable zuweisen (es handelt sich um eine Zahl), aber irgendwie kommt da nur Kauderwelsch bei raus! :(

Und ich weiß grad nicht wo der Fehler liegt!

Hier der Code:

Code: Alles auswählen

 
if rightstr(Typtage.Lines[i],3) = 'UWH' then
      c := StrToInt(Faktoren.Lines[1]);
      edit1.text:=IntToStr(c);
 


Vielleicht wißt ihr da was.

LG

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

Re: Zuweisung klappt nicht (Memo)

Beitrag von theo »

Viel zu wenig Information.
Was sind Typtage und Faktoren? Was steht drin?
Und vor allem: Was ist Kauderwelsch?
Bitte mach etwas genauere Beschreibungen, wenn du Hilfe suchst.

Linkat
Lazarusforum e. V.
Beiträge: 530
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 21.3; Lazarus 3.0 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 32
Wohnort: nr Stuttgart

Re: Zuweisung klappt nicht (Memo)

Beitrag von Linkat »

In der Variablen c steckt ja immer noch das "UWH". Du musst erst die Zahl aus dem String separieren (mit s:=Copy(c, 1,x) mit x Anzahl der Ziffern), dann erst kannst du den String in eine Integerzahl wandeln.

Gruß, Linkat
Linux Mint 21; Lazarus 2.2.4 FPC 3.2.2; RaspiOS

gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: Zuweisung klappt nicht (Memo)

Beitrag von gillian_x »

zu wenig Information.
Was sind Typtage und Faktoren? Was steht drin?
Und vor allem: Was ist Kauderwelsch?
Bitte mach etwas genauere Beschreibungen, wenn du Hilfe suchst.


Also Typtage und Faktoren sind einfach nur 2 Memos, bzw die Namen dafür statt Memo1 usw.

Ich gehe also das erste Memo (Typtage) mit einer Schleife Zeile für Zeile durch, sollte in einer Zeile der Ausdruck "UWH" gefunden werden, soll eine Zeile aus dem zweiten Memo (Faktoren) in einer Variable gespeichert werden.

Mit Kauderwelsch meine ich: In der zweiten Zeile des Memos steht eine 2, als Ausgabe erhalte ich aber sowas wie 453642 :(

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: Zuweisung klappt nicht (Memo)

Beitrag von MacWomble »

... wenn meine Glaskugel nicht kaputt wäre, hätte ich vielleicht eine Lösung gefunden :shock:
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: Zuweisung klappt nicht (Memo)

Beitrag von gillian_x »

Hier mal der Ganze Code, vielleicht einfacher dann :D

Code: Alles auswählen

var
  a,b:string;
  i,c:integer;
 
begin
       a:=Edit1.Text;
       b:=Edit2.Text;
 
        Memo1.Lines.LoadFromFile('C:\Users\Desktop\typtage'+a+'.txt');
        Memo2.Lines.LoadFromFile('C:\Users\Desktop\Zone'+a+'EFH_'+b+'.txt');
 
       for i:= 1 to Memo1.Lines.Count-1 do
       begin
         if rightstr(Memo1.Lines[i],3) = 'UWH' then
         c := StrToInt(Memo2.Lines[1]);
         edit3.text:=IntToStr(c);
         break;
       end;
 
end;     

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Zuweisung klappt nicht (Memo)

Beitrag von Socke »

Code: Alles auswählen

var
  a,b:string;
  i,c:integer;
 
begin
       a:=Edit1.Text;
       b:=Edit2.Text;
 
        Memo1.Lines.LoadFromFile('C:\Users\Desktop\typtage'+a+'.txt');
        Memo2.Lines.LoadFromFile('C:\Users\Desktop\Zone'+a+'EFH_'+b+'.txt');
 
       for i:= 1 to Memo1.Lines.Count-1 do
       begin
         if rightstr(Memo1.Lines[i],3) = 'UWH' then
         begin // <-- hier
           c := StrToInt(Memo2.Lines[1]); // <-- ACHTUNG: Memo2 muss mindestens 2 Zeilen enthalten, ansonten gibt es eine Exception
           edit3.text:=IntToStr(c);
           break;
         end; // <-- bis hier wird nur ausgeführt, wenn UWH gefunden wurde
       end;
 
end;     

Alle Befehle, die ausgeführt werden sollen, wenn UWH gefunden wurden, müssen in einem begin..end Block zusammengefasst werden.
Ansonsten passiert bspw. folgendes:
die erste Ziele enthält kein UWH, daher wird die Variable c nicht mit der Zahl aus Memo2 gefüllt.
Trotzdem wird die Zahl in c in Edit3 ausgegeben. Zum Schluss wird die Schleife verlassen; es findet kein zweiter Durchlauf statt.

Edit: Warnung zu Idizes eingefügt
Zuletzt geändert von Socke am Fr 12. Jun 2015, 15:11, insgesamt 1-mal geändert.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

gocher
Beiträge: 298
Registriert: Di 23. Nov 2010, 23:41
OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
CPU-Target: 32Bit/64Bit
Wohnort: Geldern
Kontaktdaten:

Re: Zuweisung klappt nicht (Memo)

Beitrag von gocher »

Dein Code liest sich so:

Du möchtest das Memo1 ab der 2.Zeile, Zeile für Zeile durch gehen und wenn du am Ende einer Zeile die Zeichenkette 'UWH' findest, füllst du die Variable c mit dem ermittelten Integer-Wert aus der 2.Zeile des Memo2, egal ob c gesetzt wurde schreibst Du den Wert in das edit3-Feld und unterbrichst die Schleife? :?: :?: :shock:

[Socke war schneller!]
Zuletzt geändert von gocher am Fr 12. Jun 2015, 15:08, insgesamt 1-mal geändert.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me

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

Re: Zuweisung klappt nicht (Memo)

Beitrag von theo »

Mich hätte mehr der Inhalt der Texte interessiert.
Du weißt, schon, dass die erste Zeile bei 0 ist?
Also: Memo2.Lines[0]

gillian_x
Beiträge: 30
Registriert: Sa 22. Nov 2014, 14:24

Re: Zuweisung klappt nicht (Memo)

Beitrag von gillian_x »

ja, ich weiß, dass das bei 0 beginnt.

Okay, es lag nur an dem break :oops:

Jetzt funktioniert das! Danke!! :)

Antworten