| Autor |
Beitrag |
Grolle
      
Beiträge: 95
Win XP, Win 7
Delphi 2010 Pro
|
Verfasst: Di 26.04.05 11:38
Hi!
Ich möchte gerne das, was von der ComSchnittstelle zurück kommt (benutze Async Pro)
in eine Stringliste speichern. Das funtioniert nicht und ich weiß nicht wo der
Fehler liegt (Es wird nur ein Zeichen gespeichert. Müssten aber einige Reihen sein.)
Hier der Quelltext:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word); var Data: String; I: Integer; List: TStringList; begin List:=TStringList.Create; Data := ''; for I:= 0 to Count-1 do Data := Data + ApdComPort1.GetChar; List.Add(Data); List.SaveToFile(ExtractFilePath(ParamStr(0))+ 'temp.txt'); List.Free; end; |
|
|
chrisw
      
Beiträge: 439
Erhaltene Danke: 3
W2K
D7
|
Verfasst: Mi 27.04.05 12:09
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| List : TStringList;
List := TStringList.Create;
List.Free;
procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word); var I: Integer; begin for I:= 0 to Count-1 do List.Add(ApdComPort1.GetChar); List.SaveToFile(ExtractFilePath(ParamStr(0))+ 'temp.txt'); end; |
_________________ Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
|
|
Grolle 
      
Beiträge: 95
Win XP, Win 7
Delphi 2010 Pro
|
Verfasst: Mo 02.05.05 11:30
Hi!
So klappt das schon fast. Allerdings werden die Buchstaben alle untereinander
geschrieben. Wie schreibt er das denn jetzt zeilenweise (so wie es ankommt)
in die Stringliste?
Viele Grüße: Grolle
|
|
Smartie
      
Beiträge: 205
|
Verfasst: Mo 02.05.05 14:23
Servus,
ich hatte ein änlichzes Problem, und ich hab es folgendermaßen gelöst:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| for I := 1 to Count do begin C := ApdComPort1.GetChar; case C of #0..#31 : ; else S := S + C; end; end; tempBuffer := tempBuffer + S; |
und dann am Schluß den tempBuffer abspeichern.
Fuß zum Gruß
Smartie
|
|
Grolle 
      
Beiträge: 95
Win XP, Win 7
Delphi 2010 Pro
|
Verfasst: Mo 02.05.05 15:01
Hi!
danke für deine Antwort. Allerdings bleibt das Programm bei
der Case Anweisung hängen (Ordinaltyp erforderlich?)
Viele Grüße....
|
|
Smartie
      
Beiträge: 205
|
Verfasst: Mo 02.05.05 15:05
Dann laß die Case-Anweisung einfach weg. Wen ndu sie nutzen wilslt, mußt du deine Zeichen als Char einzeln nehmen. die Case ist nur dazu da, um die ersten 31 ASCII-Zeichen "fernzuhalten", sprich sowas wie tab, oder auch CR und LF etc.
Gruß
Smartie
|
|
Grolle 
      
Beiträge: 95
Win XP, Win 7
Delphi 2010 Pro
|
Verfasst: Mo 02.05.05 15:13
Muss ich tempBuffer dann erst nen leeren String zuweisen?
Ich checks net 
|
|
Smartie
      
Beiträge: 205
|
Verfasst: Mo 02.05.05 15:19
Grolle hat folgendes geschrieben: | Muss ich tempBuffer dann erst nen leeren String zuweisen?
Ich checks net  |
Jup, das wäre Sinnvoll.
Ich hab meine Anbindung ein bischen anders als du, deswegen würde es nicht viel sinn ergeben dir hier meinen komplette ncode einzutippen.
Spiel einfach ein bischen rum, ich hab auch n bischen länger gebraucht bis ichs funktionierend hatte. Such mal auch im forum rum, ich hab ähnliche fragen wie du vor knapp 2 wochen gestellt, gibt ziemlich ausführliche threats zu, auch in den FAQs
Lieben Gruß
Smartie
|
|
Grolle 
      
Beiträge: 95
Win XP, Win 7
Delphi 2010 Pro
|
Verfasst: Mo 02.05.05 15:27
Ich schick dir nochmal den Quelltext. Es wird aber immer noch jeder einzelne
Buchstabe untereinander in die Stringliste geschrieben
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word); var c,tempBuffer : string; I: Integer; begin tempBuffer := ''; for I:= 1 to Count do begin C := ApdComPort1.GetChar; end; tempBuffer := tempBuffer + c; List.Add(tempBuffer); List.SaveToFile(ExtractFilePath(ParamStr(0))+ 'temp.txt'); end; |
Viele Grüße... Grolle
|
|
Smartie
      
Beiträge: 205
|
Verfasst: Mo 02.05.05 15:36
Schau ma lden Code genauer an.
Du lässt deine Schleife durchlaufen, und änderst ständig dein 'c', und dann lässt du das letzte c einfach zum tempBuffer dazuschreiben.
probiers doch mal so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word); var C, tempBuffer : string; I: Integer; begin tempBuffer := ''; for I:= 1 to Count do begin C := ApdComPort1.GetChar; tempBuffer := tempBuffer + C; end; List.Add(tempBuffer); List.SaveToFile(ExtractFilePath(ParamStr(0))+ 'temp.txt'); end; |
Ich hoffe des klappt, ich habs nicht ausprobiert.
Lieben Gruß
Smartie
|
|
chrisw
      
Beiträge: 439
Erhaltene Danke: 3
W2K
D7
|
Verfasst: Mo 02.05.05 15:38
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word); var I: Integer; begin with TStringList.Create do try for I:= 0 to Count-1 do Text := Text + ApdComPort1.GetChar; SaveToFile(ExtractFilePath(ParamStr(0))+ 'temp.txt'); finally Free; end; end; |
_________________ Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
|
|
Grolle 
      
Beiträge: 95
Win XP, Win 7
Delphi 2010 Pro
|
Verfasst: Mo 02.05.05 15:41
Hi Smartie!
Auch auf die Gefahr hin, dass du mir gleich den Kopf abreißt:
Es klappt so auch nicht. Alle Buchstaben sind schön untereinander.
Viele Grüße: Grolle
|
|
Smartie
      
Beiträge: 205
|
Verfasst: Mo 02.05.05 15:45
Ich werd dir sicher nicht den Kopf abreißen. Ich hab selbst erst morgen vor 3 Wochen mit Delphi angefangen, und gehöre somit selbst noch zu den Anfängern.
Bist du sicher, daß du auc hwirklich den tempBuffer in deine Datei schreiben läßt, und nicht "C"?
Lieben Gruß
Smartie
|
|
Grolle 
      
Beiträge: 95
Win XP, Win 7
Delphi 2010 Pro
|
Verfasst: Mo 02.05.05 17:33
@ chrisw
Bei deinem Vorschlag wird leider gar nix in die Liste (Datei)
geschrieben.  .
|
|
chrisw
      
Beiträge: 439
Erhaltene Danke: 3
W2K
D7
|
Verfasst: Di 03.05.05 07:35
Dann probier das hier mal !
(Der Fehler war, dass er Count von der TStringList und nicht von der procedure genommen hat.
Da die Liste leer ist, hat er auch nichts reingeschrieben)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word); var I: Integer; t : TStringList; begin t := TStringList.Create; try for I:= 0 to Count-1 do t.Text := t.Text + ApdComPort1.GetChar; t.SaveToFile(ExtractFilePath(ParamStr(0))+ 'temp.txt'); finally t.Free; end; |
_________________ Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
|
|
Grolle 
      
Beiträge: 95
Win XP, Win 7
Delphi 2010 Pro
|
Verfasst: Di 03.05.05 09:40
Hi Chris!
Hat auch nicht geklappt. Die Datei ist nach wie vor leer.
Ich werde noch verrückt...
Habe es jetzt so probiert, aber in der Datei stehen alle
Buchstaben untereinander und es gibt ne Exception:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word); var c,tempBuffer : string; I: Integer; begin tempBuffer := ''; for I:= 1 to Count do begin C := ApdComPort1.GetChar; tempBuffer := tempBuffer + c; end; List.Add(tempBuffer); List.SaveToFile(ExtractFilePath(ParamStr(0))+ 'temp.txt'); end; |
HIIIIIIIIIIIILLLLLLLLLLLFFFFFFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEEEE
|
|
chrisw
      
Beiträge: 439
Erhaltene Danke: 3
W2K
D7
|
Verfasst: Di 03.05.05 10:23
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word); var I: Integer; t : TStringList; tempStr : String; begin t := TStringList.Create; try for I:= 1 to Count do tempStr := tempStr + ApdComPort1.GetChar; t.Text := tempStr; t.SaveToFile(ExtractFilePath(ParamStr(0))+ 'temp.txt'); finally t.Free; end; end; |
_________________ Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
|
|
chrisw
      
Beiträge: 439
Erhaltene Danke: 3
W2K
D7
|
Verfasst: Di 03.05.05 10:41
Ich denke Du hast ein grundsätzliches Verständnisproblem der Arbeitsweise der seriellen Schnittstelle ! Guck mal hier, da hab ich das schon mal erklärt !
Chris
_________________ Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
|
|
Grolle 
      
Beiträge: 95
Win XP, Win 7
Delphi 2010 Pro
|
Verfasst: Di 03.05.05 14:04
Hi!
Danke erstmal für eure Antworten und für eure Geduld.
vielleicht habe ich noch nicht das wirkliche Verständniss für
die RS232, aber warum funktioniert dann folgendes:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word); var Data: String; I: Integer; begin Data := ''; for I:= 0 to Count-1 do begin Data := Data + ApdComPort1.GetChar; RichEdit1.SelText := (Data); end; end; |
Hier wird einfach das, was von dem Gerät zurück kommt an ein Memo über-
geben. Das funktioniert sehr gut. Warum klappt das mit der Stringliste
nicht?
|
|
chrisw
      
Beiträge: 439
Erhaltene Danke: 3
W2K
D7
|
Verfasst: Di 03.05.05 14:34
Wenn Du mein letztes Beispiel nimmst, die Zeile I := 1 to Count ..
in I := 0 to Count -1 ... änderst sollte es dann auch funktionieren !
_________________ Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
|
|