| Autor |
Beitrag |
Sauger Chris
      
Beiträge: 228
Win XP, Linux SuSE 9.2
Delphi 4,Delphi 7 Ent.
|
Verfasst: 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
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) (pos('VALUES',tabel.Strings[b]) >0) then begin 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
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
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) (pos('VALUES',tabel.Strings[b]) >0) then 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; |
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 Narses: Topic aus Sonstiges (Delphi) verschoben am Do 10.09.2009 um 09:39
Moderiert von Narses: Titel geändert.
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Mi 09.09.09 19:21
Sauger Chris hat folgendes geschrieben : |
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) and (pos('VALUES',tabel.Strings[b]) >0) then 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; |
die lösung ist warscheinlich so simpel wie der code aber ich komm einfach nicht drauf
danke schon mal für eure hilfe =))) |
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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:
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) and (pos('VALUES',tabel.Strings[b]) >0) then 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 
      
Beiträge: 228
Win XP, Linux SuSE 9.2
Delphi 4,Delphi 7 Ent.
|
Verfasst: 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
      
Beiträge: 19336
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 10.09.09 09:26
|
|
Sauger Chris 
      
Beiträge: 228
Win XP, Linux SuSE 9.2
Delphi 4,Delphi 7 Ent.
|
Verfasst: Do 10.09.09 15:35
naja danke trozdem ich hab das nu so gelöst =)
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]) > 0) then begin i := b+1; found := true; end;
while Found do begin inc(i); posi1 := pos('(',tabel.Strings[i]); posi2 := pos(')',tabel.Strings[i]); finish.Add(copy(tabel.Strings[i],posi1,posi2)); if pos(');',tabel.Strings[i]) <> 0 then begin found := false; Showmessage('Ich habe fertig'); end; end; |
sieht zwar nicht so schön aus aber erfüllt seinen zweg =)
|
|
jaenicke
      
Beiträge: 19336
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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: 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) (pos('VALUES',tabel.Strings[b]) >0) then begin 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?
//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...
|
|
|