Autor Beitrag
delphidepp
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 03.11.03 13:44 
Hallo Leute ich bin ein absoluter Newbe in Sache Delphi.
Ich habe vor kurzem angefangen ein Tool zu schreiben. Und bin doch schon erstaunlich weit gekommen.

Ich habe nun zwei Fragen und bitte Euch mir dies nicht übel zu nehmen.
Ich habe zwar gesucht aber nichts passendes bisher gefunden, dass mir direkt weiter hilft.

1 Frage:

ich habe am ComPort folgende ausgabe:

AT+CPBR=1

+CPBR: 1,"+49179xxxxxxx",145,"Wxxm Bxxl"

OK

AT+CPBR=2

+CPBR: 2,"+49171xxxxxxx",145,"Pxxxxxf Axxxxxs"

OK
AT+CPBR=3

+CPBR: 3,"+49160xxxxxxx",145,"Axxxxxxn Mxxxxxxn"

OK

Nun möchte ich folgende Daten in ein Array of String aufnehmen:
aus : +CPBR: 3,"+49160xxxxxxx",145,"Axxxxxxn Mxxxxxxn"
array1[1] := 3
array2[1] := +49160xxxxxxx
array3[1] := 145
array4[1] := Axxxxxxn Mxxxxxxn

ich habe mir gedacht mit copy(daten,8,1) usw aber die stellen können sich ändern.

also muss ich aus der Zeile nach einem String suchen der sich in ""
befindet und nach einem String der sich vor einem , befindet

Leider habe ich überhaupt keine Lösung oder eine Idee oder Ansatz parat wie ich das machen soll.


Frage Nr 2.

Ich habe ein Problem mit meiner Schleife

mein Quelltext sieht so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Button4Click(Sender: TObject);
var s: integer;
begin

  for s:=1 to 100 do
    begin
      SerialPortNG1.SendString('AT+CPBR='+inttostr(s)+ #13+#10);
      sleep(1000);
      edit1.Text:=serialportng1.ReadNextClusterAsString;

    end;
end;


ich sende Daten an comport an dem ein handy dran ist das soll die einträge des telefonbuches auslesen.

wenn ich die schleif erichtig verstehe dann sollte er doch die schleife mit s = 1 anfangen. dann sendet er den befahl an das modem wartet 1 sekunde liest das was das modem ausgibt aus und schreibt das in das edit1-feld. und macht dann die schleif nochmal und das solange bis er bei 100 (bzw 101) ist.

Doch das Problem ist ich habe den eindruck dass er aber nicht diese 1 sekunde abwartet sondern die schleife sofort 100 mal ablaufen läßt.
denn wenn ich in der schleife einfach nur den wert der s variable in ein labelfeld eintragen lasse dann sehe ich nicht wie er hochzählt sondern das dauert genau 100 sekunden und dann steht im label feld plötzlich 100 drin.

was mache ich falsch in der schleife.

so nun genug getextet.

danke schon mal im voraus
und wie gesagt nicht böse sein ich bin ein anfänger

gruß delphidepp
focus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 187

XP, 2k, 98, Me
D6 Prof
BeitragVerfasst: Mo 03.11.03 16:17 
2Fragen==>2Threads

#1:
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:
procedure TForm1.Button1Click(Sender: TObject); 
var 
   a: integer; 
   name: string
   fertig: boolean; 
begin 
  name:= '3,"+49160xxxxxxx",145,"Axxxxxxn Mxxxxxxn,'
  fertig:=false;

  repeat 
    // Position der 
    a:= Pos(',', name); 
    // Trennen 
    if (a > 0then ListBox1.Items.add(Copy(name, 0, a - 1)) 
    else 
    begin 
      ListBox1.Items.add(name); 
      fertig:= True; 
    end
    name:= Copy(name, a + 1, Length(name)); 
  until fertig = True; 
end;

[Killi]

Gruss
Michael

_________________
Wer im Leben kein Ziel hat, verläuft sich.
delphidepp Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 03.11.03 16:31 
ich glaub da fehlt aber noch was.

das sind daten von meinem handy ich lese das telefonbuch aus
und möchte in 3 arrays den namen die position die rufnummer und die 145 eintragen.

sowie ich das aus diesem beispiel sehe werden de daten zerlegt und nach der reihe in eine listbox eingetragen.

das problem ist ich brauche bei dem namen die "" nicht und bei der rufnummer ebenfalss nicht. wie soll ich die weg kriegen?.

und wie bringe ich die daten in 4 arrays rein?

wie sieht es denn dann aus?

danke
focus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 187

XP, 2k, 98, Me
D6 Prof
BeitragVerfasst: Mo 03.11.03 17:30 
Ich dachte eigentlich das dein Hauptproblem das Trennen der Daten an sich ist.. und wenn du es erstmal in einer Stringlist hast kannst du recht einfach auf die einzelnen Elemente zwischen den Kommas zugreifen..

ausblenden Delphi-Quelltext
1:
function StringReplace(const S, OldPattern, NewPattern: string; Flags: TReplaceFlags): string;					

Gibt einen String mit ersetzten Sub-Strings zurück.
Damit bekommst du erstmal die unerwünschten Zeichen weg...

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:
procedure TForm1.Button1Click(Sender: TObject);  
var  
   a: integer;  
   name: string;  
   fertig: boolean;  
begin  
  name:= '3,"+49160xxxxxxx",145,"Axxxxxxn Mxxxxxxn,';  
  name:=StringReplace(name, '"''', rfReplaceAll);

  fertig:=false; 

  repeat  
    a:= Pos(',', name);  
    if (a > 0then ListBox1.Items.add(Copy(name, 0, a - 1))  
    else  
    begin  
      ListBox1.Items.add(name);  
      fertig:= True;  
    end;  
    name:= Copy(name, a + 1, Length(name));  
  until fertig = True;  
end;

ungetestet...aber dürfte tun..
anstelle der ListBox sollst du natürlich TStringList verwenden...zur Visualisierung gefällt mir einfach ListView besser...

Gruss
Michael

_________________
Wer im Leben kein Ziel hat, verläuft sich.
delphidepp Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 10.11.03 10:31 
hi

danke erstmal für deine schnelle Antworten.

die 1 Variante von Dir hat super funktioniert. Da waren aber noch die "" drin.

Die zweite Variante von Dir bekomme ich einfach nicht zum laufen.

folgenden Fehler bekomme ich beim kompilieren.

[Fehler] Unit1.pas(34): Inkompatible Typen: 'TReplaceFlags' und 'Enumeration'

irgendwie sagt mir das baer nichts