Autor Beitrag
Sauger Chris
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 228

Win XP, Linux SuSE 9.2
Delphi 4,Delphi 7 Ent.
BeitragVerfasst: Mi 09.09.09 18:32 
huhu ich spiel gerade mal wieder mit den pos ,copy rum und zwar versuch ich meinen phpmyadmin dump zu filtern
sprich er soll nach einem tabel in der datei suchen "INSERT INTO `news_bot`"
und die darauf folgenden einträge zwischen ( und ) in eine memo komp. ausgeben
so code bis jetzt :)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
tabel := TStringList.Create;
tabel.LoadFromFile(filename);
for b := 0 to tabel.Count - 1 do
if (pos('INSERT INTO `news_bot`',tabel.Strings[b]) >0)  //nach dem tabel suchen
   (pos('VALUES',tabel.Strings[b]) >0then
begin                                              //wenn gefunden strings zwischen ( und ) ausgeben
lenge := Length(tabel.Strings[b]);
posi1 := pos('(',tabel.Strings[b]);
posi2 := pos(')',tabel.Strings[b]);
end;

Memo2.Lines.Add(copy(tabel.Strings[b],posi1,posi2));
end;


so jetzt zu meinem prob der dump sieht so in etwa aus

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
INSERT INTO `news_bot` (`news_id`,`user_id`, `user_name`, `user_news`, `user_email`,`news_date`) VALUES
('1','2','pepe','heute gibt es lecker kuchen usw...','support@localhost.de','09.09.2009'),
('2','2','pepe','heute gibt es nix','support@localhost.de','09.09.2009')
('3','2','pepe','heute gibt es ..','support@localhost.de','09.09.2009')
('4','2','pepe','heute gibt es kuchen usw...','support@localhost.de','09.09.2009')
('5','2','pepe','heute gibt es ...','support@localhost.de','09.09.2009')




jetzt gibt er mir in meiner memo wie soll es auch anderst sein die ersten strings zwischen ( ) aus ^^ genau das brauch ich nicht "(`news_id`,`user_id`, `user_name`, `user_news`, `user_email`,`news_date`)"

so geht es zwar aber er gibt mir nur die erste zeile aus :)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
tabel := TStringList.Create;
tabel.LoadFromFile(filename);
for b := 0 to tabel.Count - 1 do
if (pos('INSERT INTO `news_bot`',tabel.Strings[b]) >0)  //nach dem tabel suchen
   (pos('VALUES',tabel.Strings[b]) >0then
begin
tabel.Strings[b] := tabel.Strings[b+1];           //wenn gefunden strings zwischen ( und ) ausgeben
lenge := Length(tabel.Strings[b]);
posi1 := pos('(',tabel.Strings[b]);
posi2 := pos(')',tabel.Strings[b]);
end;

Memo2.Lines.Add(copy(tabel.Strings[b],posi1,posi2));
end;


die lösung ist warscheinlich so simpel wie der code aber ich komm einfach nicht drauf :-(



danke schon mal für eure hilfe =)))


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Do 10.09.2009 um 09:39
Moderiert von user profile iconNarses: Titel geändert.
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Mi 09.09.09 19:21 
user profile iconSauger Chris hat folgendes geschrieben Zum zitierten Posting springen:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
tabel := TStringList.Create;
tabel.LoadFromFile(filename);
for b := 0 to tabel.Count - 1 do
if (pos('INSERT INTO `news_bot`',tabel.Strings[b]) >0and  //nach dem tabel suchen
   (pos('VALUES',tabel.Strings[b]) >0then
begin
tabel.Strings[b] := tabel.Strings[b+1];           //wenn gefunden strings zwischen ( und ) ausgeben
lenge := Length(tabel.Strings[b]);
posi1 := pos('(',tabel.Strings[b]);
posi2 := pos(')',tabel.Strings[b]);
end;

Memo2.Lines.Add(copy(tabel.Strings[b],posi1,posi2));
end;


die lösung ist warscheinlich so simpel wie der code aber ich komm einfach nicht drauf :-(



danke schon mal für eure hilfe =)))
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mi 09.09.09 23:16 
Hallo,

wenn das 'and' fehlt wird das Prog überhaubt nicht gestartet = "Operator oder Semikolen fehlt"
Da aber die erste Zeile im Memo ausgegeben wird, denke ich das in dem gepostete Code Veränderungen vorgenommen wurden.

Mir fällt auf das die Code-Zeile "Memo2.Lines.Add(..." außerhalb des Schleife steht.
Also Code formatieren und Fehler finden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
tabel := TStringList.Create;
tabel.LoadFromFile(filename);
for b := 0 to tabel.Count - 1 do
  if (pos('INSERT INTO `news_bot`',tabel.Strings[b]) >0and
     (pos('VALUES',tabel.Strings[b]) >0then
     begin
       tabel.Strings[b] := tabel.Strings[b+1];           
       lenge := Length(tabel.Strings[b]);
       posi1 := pos('(',tabel.Strings[b]);
       posi2 := pos(')',tabel.Strings[b]);
     end;
Memo2.Lines.Add(copy(tabel.Strings[b],posi1,posi2));
end;

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Sauger Chris Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 228

Win XP, Linux SuSE 9.2
Delphi 4,Delphi 7 Ent.
BeitragVerfasst: Do 10.09.09 08:04 
oh nene das and steht bei mir im source drin hab ich irgendwie gelöscht wo ich die kommentare hier eingefügt habe ^^ *peinlich


naja nach dem kaffee beschäftige ich mich mal weiter mit :)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19336
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 10.09.09 09:26 
user profile iconSauger Chris hat folgendes geschrieben Zum zitierten Posting springen:
naja nach dem kaffee beschäftige ich mich mal weiter mit :)
Die Antwort hast du doch auch schon bekommen. Du greifst nach der Schleife noch auf die Schleifenvariable zu, deren Wert ist dort aber undefiniert. Meistens warnt da der Compiler auch an der Stelle...
user profile iconLannes hat folgendes geschrieben Zum zitierten Posting springen:
Mir fällt auf das die Code-Zeile "Memo2.Lines.Add(..." außerhalb des Schleife steht.
Also Code formatieren und Fehler finden:
[...]
Du hast deinen Quelltext nämlich leider nicht formatiert. Und dann brauchst du dich auch nicht wundern, wenn dir Fehler nicht auffallen... :roll:
Sauger Chris Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 228

Win XP, Linux SuSE 9.2
Delphi 4,Delphi 7 Ent.
BeitragVerfasst: Do 10.09.09 15:35 
naja danke trozdem ich hab das nu so gelöst =)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
tabel := TStringList.Create;
finish := TStringList.Create;
tabel.BeginUpdate;
tabel.LoadFromFile(filename);
i := 0;
for b := 0 to tabel.Count - 1 do
if (pos('INSERT INTO `news_bot`',tabel.Strings[b]) > 0then  // nach dem string suchen wenn gefunden
begin   
i := b+1;                    //i = position von b + 1 weil die erste zeile nicht benötigt wird                 
found := true;               //found = true damit die while schleife los legen darf :)
end;

while Found do
begin
inc(i);                                            //string count um 1 erhöhen
  posi1 := pos('(',tabel.Strings[i]);              //position von ( ermitteln
  posi2 := pos(')',tabel.Strings[i]);              //position von ) ermitteln
  finish.Add(copy(tabel.Strings[i],posi1,posi2));  //ergebnis in Tstringlist schreiben
if pos(');',tabel.Strings[i]) <> 0 then            //wenn  ); im string gefunden wurde while schleife beenden mit
begin                                              //found = false
  found := false;
  Showmessage('Ich habe fertig');
  end;
end;


sieht zwar nicht so schön aus aber erfüllt seinen zweg =)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19336
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 10.09.09 16:25 
Da fehlen noch die Ressourcenschutzblöcke.

Was du da jetzt machst, habe ich gerade keine Lust nachzuvollziehen, das sieht zu... komisch... aus. Du solltest endlich den Code ordntlich formatieren, damit man sieht was da passiert ohne erst ewig sich den anschauen zu müssen. Gemeint war einfach nur:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
  tabel := TStringList.Create;
  try
    tabel.LoadFromFile(filename);
    for b := 0 to tabel.Count - 1 do
      if (pos('INSERT INTO `news_bot`',tabel.Strings[b]) >0)  //nach dem tabel suchen
        (pos('VALUES',tabel.Strings[b]) >0then
      begin
        //tabel.Strings[b] := tabel.Strings[b+1];           //wenn gefunden strings zwischen ( und ) ausgeben
        lenge := Length(tabel.Strings[b]);
        posi1 := pos('(',tabel.Strings[b]);
        posi2 := pos(')',tabel.Strings[b]);
        Memo2.Lines.Add(copy(tabel.Strings[b],posi1,posi2));
      end;
  finally
    tabel.Free;
  end;
Denn sonst wird das nun einmal nicht in der Schleife bei jedem Fund ausgeführt.

Warum nennst du die Variable eigentlich tabel statt table? :lol:

//EDIT:
Ach ja, ganz wichtig, fällt mir grad auf...
Copy erhält als dritten Parameter die Anzahl der zu kopierenden Zeichen, siehe Hilfe oder Eingabehilfe...