![]() |
simple for-schleife
etwas ganz simples, aber irgendwie ist heut der wurm drin ..
ich habe eine "for schleife" und er soll den ganzen text zeichen für zeichen durchgehen (to length) das macht er auch wunderbar, aber er fügt der Liste nicht mehr als EINE Positionsangabe hinzu, selbst wenn er es eigentlich müsste.
Code:
Nachdem ich die forensuche mal angeschmissen hatt, habe ich halt noch "continue" und" writeln" hinzugefügt
for i:= 1 to length(text) do
begin if (text[i] = 'i') and (text[i+1] = 'm') and (text[i+2] = 'g') then begin position_g := Pos('img', text); s1 := TStringList.Create; // StringList erstellen try s1.Add(inttostr(position_g)); // in SteringList aufnehmen finally Memo1.Text := s1.Text; s1.Free; // Speicher freigeben end; end else end; end; aber ohne Erfolg. Bin für jeden Denkanstoß dankbar! |
Re: simple for-schleife
1. Falsche Grenze
Delphi-Quellcode:
Was für ein wert hat x am Anfang?
for i:= 0 to length(text)-1 do begin
Was soll das Programm genau machen? |
Re: simple for-schleife
Zitat:
x:= 0; also ich hab mal grad ne showmessage eingebaut und er führt die if schleife sauber aus aber fügt den wert nicht der liste hinzu d.h. irgendwas an der liste ist falsch :( das programm soll im moment nicht viel machen außer die positions werte von "img" in memo1 eintragen bzw in die stringliste damit ich dann später zugriff auf die werte habe |
Re: simple for-schleife
Doppelpost :x
|
Re: simple for-schleife
Also ich würde mal sagen, in dem Code ist irgendwie der Wurm drin.
Du hast eine Schleife mit der Variablen i. Dann benutzt du noch eine zweite Variable x, die du, wenn ich das richtig sehe, bei jedem Schleifenaufruf erhöhst. Warum benutze du dann nicht gleich i? Wenn das zeichen x des texts = i, das darauffolegnde m und das übernächste g ist, passiert folgendes: Außerdem wird in jedem Durchlauf eine Stringliste erstellt, einer niemals verwendeten Variable zeile eine ebenfalls niemals verwendete Variable n zugewiesen, der Wert der Variablen position_g (dessen Ermittlung ich nicht verstehe) zu der Stringlist hinzugefügt und der Inhalt der Stringliste in Memo1 kopiert. Anschließend wird die Stringliste zerstört, x inkrementiert, der Schleifendurchlauf mittels continue abgebrochen, sodass die sinnferie anweisung writeln(i) nie zur Azsführung kommt. Andernfalls, wird x inkrementiert, udn der Schleifendurchlauf abgebrochen. Was soll dieser Code bezwecken, wenn man Fragen darf? Irgendwas hast du da völlig falsch verstanden... @mkinzler (roter kasten :P) Nein, wenn schon müsste es heißen
Delphi-Quellcode:
for i := 1 to length(text) do
edit: Ok, da ich jetzt den Zweck kenne, werde ich mal versuchen, dass auf meine Art zu lösen.
Delphi-Quellcode:
Ist ungetestet. Du musst die Unit "strutils" in die uses aufnehmen, um posex bentuzen zu können!
i := posex('img',text);
while i>0 do begin memo1.lines.add(inttostr(i)); i := posex('img',text); end; |
Re: simple for-schleife
Zitat:
Also ich benutze delphi 6 und da muss man nicht extra strutils hinzufügen um PosEX zu benutzen Außerdem braucht PosEx drei Werte (string, substring und offset also wo er anfangen soll), allerdings brauche ich PosEx im Moment nicht. Ich werde mal sehen was ich mit deiner variante anfangen kann :D danke ! edit: oh das bringt mir net viel da ich es einer stringliste hinzufügen muss und nicht einer memo Achja nur um das aufzukären .. n war überflüssig und von altem code noch drinne aber ziemlich egal da sowas nicht stört und x brauchte ich nur als counter |
Re: simple for-schleife
Natürlich
Delphi-Quellcode:
:oops:
for i := 1 to length(text) do
|
Re: simple for-schleife
Zitat:
|
Re: simple for-schleife
ok posex könnte man doch dafür verwenden
hier der code falls es wen interessiert:
Code:
funktioniert supi
for i:= 0 to length(text) do
begin if (text[i] = 'i') and (text[i+1] = 'm') and (text[i+2] = 'g') then begin position_g := PosEx('img', text, i); ShowMessage('Gefunden an Stelle: ' + inttostr(position_g) ); s1 := TStringList.Create; s1.Add(inttostr(position_g)); refresh; memo1.lines.add(s1.text); //s1.clear; continue; end else continue; end; end; |
Re: simple for-schleife
Zitat:
Ausserdem sehe ich das nicht so, dass das ganz suppi funzt: text :='i'; Wenn du jetzt deinen Algo darauf anwendest, sieht das beim ersten Zeichen so aus: if (text[1] = 'i') and (text[2] = 'm') and (text[3] = 'g') then begin --> AccessViolation! ultimativ wäre wohl:
Delphi-Quellcode:
Also fast genau so wie NamenLozer bereits sagte. Das ist ausserdem deutlich schneller als deine Variante, da die Borlandentwickler die pos(ex) Funktionen direkt in Assembler gecodet haben und sich dabei sehr viele Gedanken gemacht haben, wie das ganze am schnellsten ist :-).
i := pos('img',text);
while i>0 do begin memo1.lines.add(inttostr(i)); i := posex('img',text,i+1); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:04 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