Entwickler-Ecke
Sonstiges (Delphi) - Erkennung von Zahlen, in bestimmten Zeilen.
LuckyStrike4life - Mo 08.09.03 14:49
Titel: Erkennung von Zahlen, in bestimmten Zeilen.
Morgen,
ja mit dem Titel hab ich mich schwer getan, denn mein Problem ist nicht mit einer Zeile zu erklären.
Daher mach ich dies jetzt:
Ich hab die Aufgabe, ein Programm zu entwickeln - welches Datenbankinhalte aufnimmt, abgleicht und diese Informationen an die richtige Datenbank anpasst.
Aber damit kann ich noch nicht beginnen, erstmal muss ich aus einer Datenbank ermitteln, wie oft ein bestimmter Wert verwendet wurde. Ich poste mal ein Auszug aus der Datenbank:
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: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| 000151000101200312030037200 102301a010020000001[b]001[/b]00173002 03 000 202301a0109699 332301a0111102100 342301a011001100 000 402301a0110200 071 0063 280 1010 305 00010 02 0060 006 402301a0110300 060 0050 190 1310 305 00040 02 0070 006 402301a0110400 080 0050 190 1320 305 00027 02 0060 006 402301a0110500 011 0061 230 1310 305 00020 02 0030 006 402301a0110100 080 0071 280 1014 305 00076 02 0070 006 102301a020020000001[b]001[/b]00118002 03 000 202301a0209699 332301a0211102100 342301a021001100 000 402301a0210100 080 0063 260 1215 305 00044 0201 0070 006 402301a0210200 011 0060 230 1210 305 00030 0201 0070 006 402301a0210300 032 0060 260 1210 405 00014 0201 0090 006 402301a0210400 060 0048 200 1001 305 00015 0201 0040 006 402301a0210500 091 0063 260 1230 305 00015 0201 0050 006 102301a030020000001[b]001[/b]00669002 03 000 202301a0309699 332301a0311102100 342301a031001100 000 402301a0310100 020 0063 250 1301 302 00210 0201 0095 006 402301a0310402 020 0011 1010 301 00100 402301a0310200 071 0063 270 1310 302 00210 0201 0050 006 402301a0310300 011 0063 230 1010 302 00249 0201 0040 006 102301a040020000001[b]001[/b]00264002 03 000 202301a0409699 332301a0411102100 342301a041001100 000 402301a0410100 020 0163 300 1128 302 00092 13 030007 402301a0410200 011 0163 310 1114 302 00081 13 030007 402301a0410300 021 0163 290 1130 501 00053 13 030007 402301a0410400 031 0063 250 1411 301 00038 02 0095 502301a04102021 011035004 502301a04103021 021030004 502301a0410102100068 020035004 01 802301a041Wenn erforderlich Kulturgatter anlegen. 102301a050020000001[b]001[/b]00457002 03 000 202301a0509699 332301a0511102100 342301a051001100 010 402301a0510400 031 0087 290 1210 301 00055 02 0080 006 402301a0510100 020 0086 310 1004 302 00352 02 0065 006 402301a0510200 011 0086 280 1010 302 00040 02 0030 006 402301a0510300 041 0082 280 1006 301 00010 093 |
Wichtig ist der Wert, in diesem Beispiel immer "001", den ich versucht habe fett auszugeben, was aber wohl durch die Deklaration "Code" nichts wird.
Dieser Wert muss automatisch gefunden und notiert werden.
Es ist möglich dem Programm zu sagen welche Zeilen relevant sind, dass sind immer nur die, die mit einer "10" beginnen und der Wert beginnt immer an der 19en Stelle und endet an der 22en Stelle.
Hat jemand eine Idee wie man so ein Programm angehen kann? Wäre sehr wichtig, ansonsten liegt die Sache weiterhin auf Eis... .
Tino - Mo 08.09.03 15:39
Hallo,
Du gehst halt in einer Schleife die einzelnen Zeilen durch und prüfst ob diese mit
10 anfangen:
Delphi-Quelltext
1:
| If Copy (Str, 1, 2) = '10' Then |
Wenn diese mit
10 anfangen dann kannst wiederum mit Copy prüfen ob an der 19 Stelle
001 steht.
Gruß
Tino
LuckyStrike4life - Di 09.09.03 09:05
Das hört sich ja schon mal gut an,
aber wie bekomme ich das Programm dazu, diesen Text denn auch auf die Datei anzuwenden? Muss ich dafür die Daten laden lassen? Also, zum Beispiel eine Menüleiste erstellen, mit der Funktion zum laden von txt Datein?
Tino - Di 09.09.03 09:58
Hallo!
LuckyStrike4life hat folgendes geschrieben: |
Muss ich dafür die Daten laden lassen? |
Natürlich. Wenn du mit dem Text arbeiten möchtest musst du den irgendwie "laden". Vielleicht so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Var SL: tStringList; Begin SL := tStringList.Create; Try SL.LoadFromFile ('c:\logfile.txt'); Finally SL.Free; End; End; |
LuckyStrike4life hat folgendes geschrieben: |
Also, zum Beispiel eine Menüleiste erstellen, mit der Funktion zum laden von txt Datein? |
Das weiß ich doch nicht wie du dein Programm aufbauen willst. Das musst du schon selbst entscheiden und dann auch programmieren.
Gruß
Tino
LuckyStrike4life - Di 09.09.03 10:33
Danke,
werd das dann jetzt mal so probieren. Kommen aber sicher noch ein paar Fragen :lol: .
Ich bezieh mich mal ganz auf meine Signatur.
LuckyStrike4life - Di 09.09.03 10:55
Das mag irgendwie noch nicht so ganz, hab deinen Code mal auf eine ButtonClick Funktion gelegt:
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: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
| unit MainFormpas;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TMainForm = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private public end;
var MainForm: TMainForm; Var SL: tStringList;
implementation
{$R *.DFM}
procedure TMainForm.Button1Click(Sender: TObject); begin Begin SL := tStringList.Create; Try SL.LoadFromFile ('c:\logfile.txt'); If Copy (Str, 1, 2) = '10' Then test1.show; Finally SL.Free; End; End; end;
end. |
So wie es jetzt steht kanns sicher auch noch nicht funktionieren, aber Delphi mag noch nicht mal compilieren.
Bei "If Copy (Str, 1, 2) = '10' Then" meint Delphi
Zitat: |
[Fehler] MainFormpas.pas(34): '(' erwartet, aber ',' gefunden
[Fehler] MainFormpas.pas(34): Inkompatible Typen |
.
Was íst denn falsch?
CenBells - Di 09.09.03 12:39
Hallo,
es sollte besser so heißen
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TMainForm.Button1Click(Sender: TObject); Begin SL := tStringList.Create; Try SL.LoadFromFile ('c:\logfile.txt'); If Copy (Sl[0], 1, 2) = '10' Then begin test1.show; end; Finally SL.Free; End; end; |
das ganze geraffel mit copy solltest du noch in eine for schleife packen und dann kannst du die ganze liste abarbeiten.
Gruß
Ken[/delphi]
LuckyStrike4life - Di 09.09.03 13:09
Danke dir,
das bringt mich schon ein Stück weiter.
LuckyStrike4life - Mi 10.09.03 09:46
Morgen,
naja - n wenig Grundwissen sollte ich schon haben, also ich bin zumindest nicht der absolute Anfänger. Natürlich reicht es nicht aus um zu sagen das ich Delphi könnte, aber vielleicht ansatzweise. Den Link werd ich aber sicher trotzdem gut verwenden können, Danke.
Ich hab jetzt den letzten Code der von CenBells kam ordentlich getestet und er funktioniert auch. Allerdings hab ich noch ein paar Fragen dazu.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TMainForm.Button1Click(Sender: TObject); begin SL := tStringList.Create; Try SL.LoadFromFile ('c:\test.txt'); If Copy (Sl[0], 1, 2) = '10' Then begin Application.Terminate; end; Finally SL.Free; End; end; |
Application.Terminate; hab ich eingesetzt um zu überprüfen ob es tatsächlich funktioniert und wie auch schon gesagt - es geht.
Aber was für mich jetzt noch wichtig wäre, wie kann ich dem Programm sagen das es wenn die ersten beiden Zahlen "1" und "0" sind, dass in der gleichen Zeile ab der 19ten Stelle bis zur 22sten Stelle die Zahlen ausgelesen werden müssen und irgendwo hin gespeichert werden. So das der User diese Später auslesen kann.
Da komm ich leider nicht drauf :( .
CenBells - Mi 10.09.03 10:26
Hallo,
LuckyStrike4life hat folgendes geschrieben: |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TMainForm.Button1Click(Sender: TObject); begin SL := tStringList.Create; Try SL.LoadFromFile ('c:\test.txt'); If Copy (Sl[0], 1, 2) = '10' Then begin Application.Terminate; end; Finally SL.Free; End; end; |
Application.Terminate; hab ich eingesetzt um zu überprüfen ob es tatsächlich funktioniert und wie auch schon gesagt - es geht. :roll:
Aber was für mich jetzt noch wichtig wäre, wie kann ich dem Programm sagen das es wenn die ersten beiden Zahlen "1" und "0" sind, dass in der gleichen Zeile ab der 19ten Stelle bis zur 22sten Stelle die Zahlen ausgelesen werden müssen und irgendwo hin gespeichert werden. So das der User diese Später auslesen kann. |
Also, was ist auslesen aus einem string??? Rauskopieren. Das steht doch schon in den hier diskutierten codebeispielen. Wenn du eine zeile mit 10 gefunden hast, musst du also ab stelle 19 drei zechen kopieren (OH: copy).Das machst du also anstelle deines Application.terminate;
Das Abspeichern kann man nicht per default lösung machen:
Du könntest eine kleine Tabelle (DBase, Paradox, etc) erstellen und deine werte dort hinein speichern oder du speicherst deine Werte in eine typisierte datei.
Du musst dir vielleicht erstmal klar werden, wie die speicherung aussehen soll, bevor du dich daran versuchst.
Edit: und wenn du dir den link angeschaut hättest, wäre dir sehr schnell klar geworden, wie man die aufgabe mit dem rauslesen löst. Wahrscheinlich hätte das buch dir auch bei der speicherung geholfen.
Gruß
Ken
Tino - Mi 10.09.03 10:56
Hallo!
LuckyStrike4life hat folgendes geschrieben: |
naja - n wenig Grundwissen sollte ich schon haben, also ich bin zumindest nicht der absolute Anfänger. Natürlich reicht es nicht aus um zu sagen das ich Delphi könnte, aber vielleicht ansatzweise. |
Ich hab dir den Link nur geben weil ich der Meinung war das dir ein wenig grundlegendes Wissen im Bereich Delphi fehtl da du so etwas gecodet hast:
Delphi-Quelltext
1: 2: 3: 4: 5:
| begin begin end; end; |
War von mir auf jeden Fall nicht böse gemeint.
LuckyStrike4life hat folgendes geschrieben: |
Ich hab jetzt den letzten Code der von CenBells kam ordentlich getestet und er funktioniert auch. |
Ich hoffe du weißt warum der Code von CenBells (ist übrigends der gleiche Code den ich schon am Anfag des Topics gepostet habe) jetzt funktioniert :-D
Gruß
Tino
LuckyStrike4life - Mi 10.09.03 12:34
CenBells hat folgendes geschrieben: |
Wenn du eine zeile mit 10 gefunden hast, musst du also ab stelle 19 drei zechen kopieren (OH: copy).Das machst du also anstelle deines Application.terminate;
Das Abspeichern kann man nicht per default lösung machen:
Du könntest eine kleine Tabelle (DBase, Paradox, etc) erstellen und deine werte dort hinein speichern oder du speicherst deine Werte in eine typisierte datei. |
Ja, an soetwas hab ich gedacht. Das also die Werte gleich in eine Tabelle geschrieben werden, am besten wäre dBase. Soweit auch nicht das Problem, da reichen meine Kentnisse noch bis zum erstellen, verknüpfen usw. .
Aber mir geht nicht ganz auf wie ich denn nun diese neue Zeile angehen muss, wie soll ich dem System sagen das er nach der 19ten stelle 3 Zahlen rauslesen muss und dann diese in die Datenbank zu speichern hat.
Tino hat folgendes geschrieben: |
Ich hab dir den Link nur geben weil ich der Meinung war das dir ein wenig grundlegendes Wissen im Bereich Delphi fehtl da du so etwas gecodet hast: [...]
War von mir auf jeden Fall nicht böse gemeint. |
So hab ich es auch nicht aufgefasst. Hab mir eben dort auch noch einiges zu "Strings" durchgelesen, werde diese Seite auch noch stärker nutzen. Da bin ich mir sicher. Nur komisch das ich die nicht gefunden habe, als ich vor einigen Monaten direkt nach solchen Seiten gesucht habe. Nochmals Danke.
Tino - Mi 10.09.03 14:15
Hallo,
LuckyStrike4life hat folgendes geschrieben: |
wie soll ich dem System sagen das er nach der 19ten stelle 3 Zahlen rauslesen muss |
In dem Beispiel Code den ich dir gepostet habe steht unter anderem diese Zeile:
Delphi-Quelltext
1:
| If Copy (Sl[0], 1, 2) = '10' Then begin |
Schau dir diese mal etwas genauer an. Hier prüfe ich ob bei dem String (den ich durch Sl[0] angegeben habe) die
ersten zwei Zeichen gleich
10 ist. Jetzt müsste es doch kein Problem sein die Zeile zu kopieren und so um zu schreiben das diese nun prüft ob die
3 Zeichen ab der
19. Stelle gleich
001 ist.
Gruß
Tino
LuckyStrike4life - Mi 10.09.03 14:53
Moderiert von
Tino: Beitrag versehentlich gelöscht. Sorry :oops:
StefanH - Mi 10.09.03 15:47
Copy erwartet, den String, ind dem das passiert, dann wo es anfangen soll zu kopieren, und dann
wieviele Zeichen es kopieren soll.
Also:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| SL := tStringList.Create; Try SL.LoadFromFile ('c:\test.txt'); If Copy (Sl[0], 1, 2) = '10' Then begin If Copy (Sl[0], 19, 3) = '001' then begin application.terminate;
end; end; Finally SL.Free; end; |
Verstanden?
Stefan
CenBells - Mi 10.09.03 16:34
Hallo,
Luckystrike4life will nicht überprüfen, ob die 3 zeichen ab dem 19 gleich 001 sind. Er will das einfach nur rauskopieren und dann abspeichern. Also etwa so
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if copy(sl[0], 1, 2) = '10' then begin gesuchterWert := copy(sl[0], 19, 3); end; |
Gruß
Ken
Tino - Mi 10.09.03 17:39
Hier der Beitrag den ich vor ca. 2 Stunden versehentlich in LuckyStrike4life´s Beitrag reingepostet habe:
Tino hat folgendes geschrieben: |
Zitat: | für mich wäre es besser wenn das Programm die 3 Zeichen ab der 19ten stelle einfach kopiert, als das ich diese Abfrage. |
Na dann entferne die 2. If-Then-Abfrage und pack das Ergebnis von Copy (ist ja schließlich eine Funktion die einen String zurück gibt) in einer Variable und fertig. Was du dann mit dem Wert machst, ob in einer Textdatei schreiben oder in einer Datenbank oder so, ist eine andere Frage... und somit auch ein neues Topic :-D
Gruß
Tino |
LuckyStrike4life - Do 11.09.03 09:28
CenBells hat folgendes geschrieben: |
Hallo,
Luckystrike4life will nicht überprüfen, ob die 3 zeichen ab dem 19 gleich 001 sind. Er will das einfach nur rauskopieren und dann abspeichern. Also etwa so
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| if copy(sl[0], 1, 2) = '10' then begin gesuchterWert := copy(sl[0], 19, 3); end; |
Gruß
Ken |
Morgen,
das hört sich doch schon sehr gut an. Es sieht jetzt so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TMainForm.Button1Click(Sender: TObject); begin SL := tStringList.Create; Try SL.LoadFromFile ('c:\test.txt'); If Copy (Sl[0], 1, 2) = '10' Then begin gesuchterWert := copy(sl[0], 19, 3); TableMain.edit; TableMain.Append; TableMain.FieldByName('relev').AsString := gesuchterWert; TableMain.Post; end; end; end; Finally SL.Free; end; end; |
Aber "gesuchterWert" ist natürlich noch nicht definiert und ich weiß nicht als was ich es definieren soll.
Zitat: |
[Fehler] MainFormpas.pas(37): Undefinierter Bezeichner: 'gesuchterWert' |
Wenn ihr mir das noch verraten könntet ... :roll: .
JustusJonas - Do 11.09.03 09:42
Vielleicht solltest du dir lieber Mal ein Buch über Delphi durchlesen!
Ist wirklich nicht böse gemeint, jeder hat ja mal klein angefangen, aber so ganz ohne Fachliteratur ist das halt schwierig.
Zumindest sollte man doch schon wissen, wie man Variablen deklariert.
Und das ist auch genau der Fehler bei deinem Programm.
Delphi weiß ja überhaupt nicht was "gesuchterWert" eigentlich ist. Also kann es da auch nix reinschreiben.
Du musst Delphi sagen, dass es sich bei "gesuchterWert" um einen String handelt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TMainForm.Button1Click(Sender: TObject); var gesuchterWert : string; begin SL := tStringList.Create; Try SL.LoadFromFile ('c:\test.txt'); If Copy (Sl[0], 1, 2) = '10' Then begin gesuchterWert := copy(sl[0], 19, 3); TableMain.edit; TableMain.Append; TableMain.FieldByName('relev').AsString := gesuchterWert; TableMain.Post; end; end; end; Finally SL.Free; end; end; |
Greetz
barfuesser - Do 11.09.03 09:56
Vielleicht solltet Ihr das ganze auch mal ordenlich einrücken, dann würdet Ihr nämlich feststellen, daß es ein paar end; zuviel gibt.
barfuesser
CenBells - Do 11.09.03 10:29
@luckystrike4life:
Du musst nicht edit machen, bevor du append aufrufst. Du musst dir die hilfe zu edit und append mal anschauen.
Gruß
Ken
LuckyStrike4life - Do 11.09.03 10:48
Danke! Vielen Dank!
Damit hats geklappt, endlich!
@JustusJonas
Du hast ja recht und vielleicht wirst du lachen wenn ich sage das ich Bücher darüber gelesen habe. Allerdings warns auch nur absolute Einsteiger Bücher, leider ist Delphi für mich ab Februar auch nicht mehr relevant, denn dann wechsel ich die Arbeitsstelle und zur Ausbildung gehört Delphi nicht mehr dazu. D.h. es wurde und wird mir auch nicht unterrichtet und es wird auch nicht geprüft. Ich muss jetzt nächsten Monat mit Java anfangen, da werde ich mich natürlich stärker mit befassen.
@CenBells
Verstanden, das "edit" ist nun weg.
Dieses Thread ist damit auch fast am Ende, denke ich. Es gibt nur noch eine Frage... .
Wie ist es zu realesieren das alle Zeilen abgearbeitet werden. Schon klar das ich dafür eine Schleife brauche ... allerdings ist mir nicht klar wie dies umzusetzen ist.
Musste ich nie mit Delphi oder Pascal machn, hatte das mal in C aber das ist schon ne Weile her und bringt mich an dieser Stelle wohl auch nicht weiter.
Vielleicht n bisschen Hilfe von euch ... wäre super.
CenBells - Do 11.09.03 11:02
LuckyStrike4life hat folgendes geschrieben: |
@JustusJonas
Du hast ja recht und vielleicht wirst du lachen wenn ich sage das ich Bücher darüber gelesen habe. Allerdings warns auch nur absolute Einsteiger Bücher...
Wie ist es zu realesieren das alle Zeilen abgearbeitet werden. Schon klar das ich dafür eine Schleife brauche ... allerdings ist mir nicht klar wie dies umzusetzen ist. |
HAllo,
also schleifen und variablen werden in jedem Einsteigerbuch behandelt :roll:
Und im Link von tino findest du auch schleifen, beispielsweise hier
http://www.marcocantu.com/EPascal/German/ch05statde.htm
ich würde dir eine for schleife empfehlen. Versuch das mal mit dem link, denn wenn du auch das nicht hinbekommst, bekommst du auch in Java dicke probleme, da schleifen so etwas wie essentielles programmierwerkzeug sind, die in allen programmiersprachen gleich funktionieren und auch fast gleich aussehen (hier ein for .. to ... do , da ein for(..;..;..){...}
Gruß
Ken
JustusJonas - Do 11.09.03 11:03
Deine Vermutung mit der Schleife war schon richtig. Am besten nimmst du dafür eine For-Schleife. In dieser Schliefe kannst du angeben, dass er die Schleife von einem bis zum anderen Wert durchlaufen soll (fällt mir gerade ein wenig schwer das verständlich auszudrücken).
auf jeden Fall musst du mit 0 beginnen und das ganze so lange machen, bis du am Ende der StringList bist!
Greetz
Tino - Do 11.09.03 11:50
Die Schleife könnte so aussehen.
Delphi-Quelltext
1: 2:
| For Idx := 0 To SL.Count -1 Do |
Gruß
Tino
LuckyStrike4life - Fr 12.09.03 13:05
Tino hat folgendes geschrieben: |
Die Schleife könnte so aussehen.
Delphi-Quelltext 1: 2:
| For Idx := 0 To SL.Count -1 Do |
Gruß
Tino |
Okay danke,
ich hab mir auch das durchgelesen, was zu Schleifen zu finden war - unter dem Link den CenBells mir ans Herz gelegt hat.
Nun sieht der Code so aus:
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: 25: 26: 27:
| Var SL: tStringList; gesuchterWert : string; Idx : integer;
implementation
{$R *.DFM}
procedure TMainForm.Button1Click(Sender: TObject); begin
For Idx := 0 To SL.Count -1 Do SL := tStringList.Create; Try SL.LoadFromFile ('c:\test.txt'); If Copy (Sl[0], 1, 2) = '10' Then begin gesuchterWert := copy(sl[0], 19, 3); TableMain.Append; TableMain.FieldByName('relev').AsString := gesuchterWert; TableMain.Post; end; Finally SL.Free; end; end; |
"Idx" aus
Delphi-Quelltext
1: 2:
| For Idx := 0 To SL.Count -1 Do |
hab ich als integer deklariert, ich denke das ist richtig.
Das ganze läßt sich auch compilieren, aber wenn ich dann auf den Button (der die Funktionen beinhaltet) drücke, bricht Delphi mit ner Fehlermeldung ab.
Versucht das Programm eventuelle immer wieder die erste Zeile erneut abzufragen?
ErnestoChe - Fr 12.09.03 13:39
Hi,
nein, es wird bei jedem Schleifendurchlauf die StringListe erstellt. Das kann nicht gehen. Daher musst du diesen Code:
Delphi-Quelltext
1:
| SL := tStringList.Create; |
Vor der For-Schleife ausführen und den Schleifen-Code in ein
begin ... end -Block packen, sonst gehört nur die erste Anweisung zum Schleifen Code.
Und da jedesmal der Idx um eins erhöht wird solltest du es auch einsetzen statt eine 0 im Index anzugeben, damit die Stringliste auch durchlaufen wird:
Delphi-Quelltext
1:
| If Copy (Sl[Idx], 1, 2) = '10' Then begin |
MFG
- Ernesto -
Tino - Fr 12.09.03 13:42
LuckyStrike4life hat folgendes geschrieben: |
hab ich als integer deklariert, ich denke das ist richtig. |
Ja, das ist richtig. Allerdings würde ich die Variable Idx in der Procedure definieren und nicht als globale Variable da sie ja auch nur in der Procedure benutzt wird.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TMainForm.Button1Click(Sender: TObject); Var Idx: Integer; begin
end; |
Gruß
Tino
LuckyStrike4life - Fr 12.09.03 15:22
Okay,
danke euch.
Nun sieht der Code so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| SL := tStringList.Create;
Try SL.LoadFromFile ('c:\test.txt'); For Idx := 0 To SL.Count -1 Do begin
If Copy (Sl[0], 1, 2) = '10' Then begin gesuchterWert := copy(sl[0], 19, 3); TableMain.Append; TableMain.FieldByName('relev').AsString := gesuchterWert; TableMain.Post; end;
end; Finally SL.Free; end; |
Jetzt läßt er sich compilieren und auch den Button kann man drücken. Allerdings wird dann (vermutlich) 14 mal die erste Zeile abgearbeitet. D.h. es landet 14 mal der Wert aus der 1. Zeile in der Datenbank. Obwohl ich mir mit dem 14 mal nicht so sicher bin.
Hab ich da noch ein Fehler eingebaut, oder etwas vergessen?
cbs - Fr 12.09.03 15:30
huhu
jo gug dir nochma an was ErnestoChe geschrieben hat
ErnestoChe hat folgendes geschrieben: |
Und da jedesmal der Idx um eins erhöht wird solltest du es auch einsetzen statt eine 0 im Index anzugeben, damit die Stringliste auch durchlaufen wird:
Delphi-Quelltext 1:
| If Copy (Sl[Idx], 1, 2) = '10' Then begin | |
StefanH - Fr 12.09.03 15:31
Na klar!
wenn du 14 mal in der ersten Zeile guckst:
If Copy (Sl[0], 1, 2) = '10'
Da muss dein Schleifenzähler rein!!
Stefan
//Edit: zu langsam :(
LuckyStrike4life - Fr 12.09.03 16:22
Stimmt,
hatte ich vergessen. Hatte ich aber auch schon nachgeholt. Brachte leider nicht viel, hm... .
Noch n Fehler drin?
CenBells - Fr 12.09.03 17:56
hallo,
hast du auch bei der zuweisung von gesuchter wert den schleifenzähler reingemacht?
Delphi-Quelltext
1:
| gesuchterWert := copy(sl[idx], 19, 3); |
Gruß
Ken
LuckyStrike4life - Mo 22.09.03 09:47
CenBells hat folgendes geschrieben: |
hallo,
hast du auch bei der zuweisung von gesuchter wert den schleifenzähler reingemacht?
Delphi-Quelltext 1:
| gesuchterWert := copy(sl[idx], 19, 3); |
Gruß
Ken |
Hey,
schönen Dank - daran hats gelegen. Endlich gehts so wie es soll!
Nochmals Danke!! an alle die mir geholfen haben - ihr werdet sicher noch öfters die Chance dazu haben :) .
LuckyStrike4life - Mo 22.09.03 09:54
Um es schnell komplett zu machen - für Leute die n ähnliches Problem haben, hier der Code:
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:
| procedure TMainForm.Button1Click(Sender: TObject); begin
SL := tStringList.Create;
Try SL.LoadFromFile ('c:\file.txt'); For Idx := 0 To SL.Count -1 Do begin
If Copy (Sl[Idx], 1, 2) = '10' Then begin gesuchterWert := copy(sl[idx], 19, 3); TableMain.Append; TableMain.FieldByName('relev').AsString := gesuchterWert; TableMain.Post; end;
end; Finally SL.Free; end; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!