Autor Beitrag
Grolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 95

Win XP, Win 7
Delphi 2010 Pro
BeitragVerfasst: 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: Mi 27.04.05 12:09 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
//...global Variable
   List : TStringList;

//... im OnCreate des Forms
List := TStringList.Create;

//... im OnClose des Forms
  List.Free;


procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word);  
var  I: Integer;  
begin  
   for I:= 0 to Count-1 do List.Add(ApdComPort1.GetChar); //oder  heisst es 1 to Count ? Bitte noch mal prüfen, da ich die Komponente Async Pro nicht kenne ! 
  List.SaveToFile(ExtractFilePath(ParamStr(0))+ 'temp.txt'); 
end;

_________________
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
Grolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 95

Win XP, Win 7
Delphi 2010 Pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 205



BeitragVerfasst: Mo 02.05.05 14:23 
Servus,

ich hatte ein änlichzes Problem, und ich hab es folgendermaßen gelöst:

ausblenden 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 : {Don't display} ;
      else S := S + C;
    end;
  end;
  tempBuffer := tempBuffer + S;   //Erst temporär


und dann am Schluß den tempBuffer abspeichern.

Fuß zum Gruß

Smartie
Grolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 95

Win XP, Win 7
Delphi 2010 Pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 205



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 95

Win XP, Win 7
Delphi 2010 Pro
BeitragVerfasst: Mo 02.05.05 15:13 
Muss ich tempBuffer dann erst nen leeren String zuweisen?
Ich checks net :nixweiss:
Smartie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 205



BeitragVerfasst: Mo 02.05.05 15:19 
user profile iconGrolle hat folgendes geschrieben:
Muss ich tempBuffer dann erst nen leeren String zuweisen?
Ich checks net :nixweiss:


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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 95

Win XP, Win 7
Delphi 2010 Pro
BeitragVerfasst: 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 :gruebel:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 205



BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: Mo 02.05.05 15:38 
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 95

Win XP, Win 7
Delphi 2010 Pro
BeitragVerfasst: 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. :evil:
Viele Grüße: Grolle
Smartie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 205



BeitragVerfasst: 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"?
:gruebel:
Lieben Gruß

Smartie
Grolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 95

Win XP, Win 7
Delphi 2010 Pro
BeitragVerfasst: Mo 02.05.05 17:33 
@ chrisw
Bei deinem Vorschlag wird leider gar nix in die Liste (Datei)
geschrieben. :( .
chrisw
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: 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)
ausblenden 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;       //Dieses Count !
    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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 95

Win XP, Win 7
Delphi 2010 Pro
BeitragVerfasst: Di 03.05.05 09:40 
Hi Chris!
Hat auch nicht geklappt. Die Datei ist nach wie vor leer.
Ich werde noch verrückt... :bawling:
Habe es jetzt so probiert, aber in der Datei stehen alle
Buchstaben untereinander und es gibt ne Exception:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: Di 03.05.05 10:23 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 95

Win XP, Win 7
Delphi 2010 Pro
BeitragVerfasst: Di 03.05.05 14:04 
Hi!
Danke erstmal für eure Antworten und für eure Geduld. :roll:
vielleicht habe ich noch nicht das wirkliche Verständniss für
die RS232, aber warum funktioniert dann folgendes:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: 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.