AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

simple for-schleife

Ein Thema von warefare · begonnen am 1. Jun 2007 · letzter Beitrag vom 1. Jun 2007
Antwort Antwort
warefare

Registriert seit: 31. Mai 2007
8 Beiträge
 
#1

simple for-schleife

  Alt 1. Jun 2007, 19:51
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:
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;
Nachdem ich die forensuche mal angeschmissen hatt, habe ich halt noch "continue" und" writeln" hinzugefügt
aber ohne Erfolg.

Bin für jeden Denkanstoß dankbar!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: simple for-schleife

  Alt 1. Jun 2007, 19:54
1. Falsche Grenze for i:= 0 to length(text)-1 do begin Was für ein wert hat x am Anfang?
Was soll das Programm genau machen?
Markus Kinzler
  Mit Zitat antworten Zitat
warefare

Registriert seit: 31. Mai 2007
8 Beiträge
 
#3

Re: simple for-schleife

  Alt 1. Jun 2007, 20:10
Zitat von mkinzler:
1. Falsche Grenze for i:= 0 to length(text)-1 do begin Was für ein wert hat x am Anfang?
Was soll das Programm genau machen?

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
  Mit Zitat antworten Zitat
warefare

Registriert seit: 31. Mai 2007
8 Beiträge
 
#4

Re: simple for-schleife

  Alt 1. Jun 2007, 20:18
Doppelpost
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

Re: simple for-schleife

  Alt 1. Jun 2007, 20:19
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 )
Nein, wenn schon müsste es heißen  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:
i := posex('img',text);
while i>0 do
begin
  memo1.lines.add(inttostr(i));
  i := posex('img',text);
end;
Ist ungetestet. Du musst die Unit "strutils" in die uses aufnehmen, um posex bentuzen zu können!
  Mit Zitat antworten Zitat
warefare

Registriert seit: 31. Mai 2007
8 Beiträge
 
#6

Re: simple for-schleife

  Alt 1. Jun 2007, 20:30
Zitat von NamenLozer:


edit:
Ok, da ich jetzt den Zweck kenne, werde ich mal versuchen, dass auf meine Art zu lösen.
Delphi-Quellcode:
i := posex('img',text);
while i>0 do
begin
  memo1.lines.add(inttostr(i));
  i := posex('img',text);
end;
Ist ungetestet. Du musst die Unit "strutils" in die uses aufnehmen, um posex bentuzen zu können!

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 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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: simple for-schleife

  Alt 1. Jun 2007, 20:40
Natürlich for i := 1 to length(text) do
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: simple for-schleife

  Alt 1. Jun 2007, 20:47
Zitat von warefare:
edit: oh das bringt mir net viel da ich es einer stringliste hinzufügen muss und nicht einer memo
Du wirst ja wohl in der Lage sein den Code so anzupassen dass er es der Stringliste hinzufügt.
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
warefare

Registriert seit: 31. Mai 2007
8 Beiträge
 
#9

Re: simple for-schleife

  Alt 1. Jun 2007, 21:12
ok posex könnte man doch dafür verwenden

hier der code falls es wen interessiert:

Code:
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;
funktioniert supi
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#10

Re: simple for-schleife

  Alt 1. Jun 2007, 22:57
Zitat von warefare:
Delphi-Quellcode:
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) );
Lass mich raten: i ist immer gleich position_g. Warum noch PoSex? Die position hast du mit dem i doch schon!

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:
i := pos('img',text);
while i>0 do
begin
  memo1.lines.add(inttostr(i));
  i := posex('img',text,i+1);
end;
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 .
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 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