AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Daten synchronisieren
Thema durchsuchen
Ansicht
Themen-Optionen

Daten synchronisieren

Ein Thema von Crayser · begonnen am 19. Jan 2003 · letzter Beitrag vom 26. Feb 2003
Antwort Antwort
Seite 2 von 2     12   
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#11
  Alt 3. Feb 2003, 13:32
Moin Crayser,

als Trennzeichen kommt prinzipiell jedes Zeichen in Frage, das nicht in Infox vorkommen kan.

Auf Empfängerseite liesse sich dass den relativ leicht auseinanderfieseln, falls in den Infox Strings kein #13#10 vorkommt.

Dann könntest Du das Trennzeichen mittels StringReplace durch #13#10 ersetzen, und dann den gesamten String in eine Stringlist packen.
So hättest Du dann pro Zeile in der StringList einen Infox Wert.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Crayser

Registriert seit: 26. Dez 2002
9 Beiträge
 
#12
  Alt 9. Feb 2003, 13:56
Hallo Christian
erst einmal zur Länge des Strings.
ich habe es jetzt ziemlich unelegant gelösst. woher soll denn empfang die Länge erfahren? Soll ich die Information über die Länge des Strings schon im Clienten mitsenden, sodass empfang seine Größe mit dem gegebenen Wert verändern kann? Denn die Länge hängt ja von der Länge ab, die der Client versendet. Das gleiche Problem habe ich dann auch bei temp.
Am besten kann ich mit dem Codeabschnitt erklären.
Code:
case
...
4: begin
i:=2;
temp[2]:=#0;
temp[3]:=#0;
temp[4]:=#0;
temp[5]:=#0;
while empfang[i]<>'a' do
begin
  temp[i-1]:=empfang[i];
  inc(i);
end;
SchlaegerKopf.Left:=ClientWidth-Schlaeger.Width-strtoint(temp);
inc(i);
j:=1;
temp[2]:=#0;
temp[3]:=#0;
temp[4]:=#0;
temp[5]:=#0;

while empfang[i]<>'a' do
begin
  temp[j]:=empfang[i];
  inc(i);
  inc(j);
end;
als Trennzeichen nutze ich einfach a.
hier ist ein codeabschnitt vom case befehl. Wie kann ich die Länge von temp bestimmen damit ich nicht immer mit #0 ausfüllen muss. Denn wenn die Information von temp zB nur 3Zeichen hat muss auf temp[4] ein #0 sein bei 2Zeichen auf temp[3] etc.
Ich bin noch unerfahren wenn es um Stringlists geht. Könntest du mir zeigen wie ich mit denen umgehen kann? Oder gibt es bereits gute Beiträge irgendwo im Forum?
Jetzt zumindest braucht das Programm nicht mehr die 10 sek bis er abstütrzt sondern ca. 1min doch wodran das liegt weiss ich auch nicht.
Wahrscheinlich da ich nicht genau sagen kann wo das ende von empfang ist.

Ciao Crayser
  Mit Zitat antworten Zitat
Crayser

Registriert seit: 26. Dez 2002
9 Beiträge
 
#13
  Alt 26. Feb 2003, 20:45
Hallo zusammen,
mithilfe des debuggers habe ich eine seltsame Sache entdeckt. Und zwar handelt es sich um ein shortstring, den ich nicht editieren kann.

Hier nochmal ein aktuelles Code Fragment:
Code:
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var empfang:string[26];
test:char;

temp,t1:string[5];
t2,t3,t4:string[5];
    j,i,choose:integer;

begin
empfang := ClientSocket1.Socket.ReceiveText; //client empfängt

choose:= strToInt(empfang[1]);

case choose of
..
4: begin
i:=2;

while empfang[i]<>'a' do //info wird von empfang[2] in temp[1]
//gespeichert, dann von empf.[3] in temp[2] usw. bis empfang[i]=a
begin
  temp[i-1]:=empfang[i];
  inc(i);
end;
temp[i]:=#0; //temp wird abgeschlossen..
SchlaegerKopf.Left:=ClientWidth-Schlaeger.Width-strtoint(temp);
//..und verarbeitet
inc(i); //i wird erhöht damit anschliessend empfang[i] nicht a ist
j:=1;

while empfang[i]<>'a' do //gleiche prozedure wird aufs neue durchlaufen
//wobei j wieder von anfang an zählt und i den inhalt aus empfang //durchläuft
begin

  t1[j]:=empfang[i];
  inc(i);
  inc(j);
end;
t1[j]:=#0;

Ball.Top:=ClientHeight-Ball.Height-strtoint(t1);
inc(i);
j:=1;

while empfang[i]<>'a' do
begin

  t2[j]:=empfang[i]; //**HIER IST DER FEHLER**
  inc(i);
  inc(j);
end;
t2[j]:=#0;

Ball.Left:=ClientWidth-Ball.Width-strtoint(t2);
..
end;
end;
Hier nun die Werte, die der Debugger mir ausspuckt, nachdem ich die :
empfang:'4280a400a334a0a-2a'
temp:'280'#0#0'r'#4'º280'#0#0#0#0'º280'#0#0#0#0'º2 80'#0#0'r'#4'º280'#0#0'r'#4'º280'#0#0'r'#4#0'3«'#2 '+'#0#0#0'1400'#0'«r'#4#$1A'¿'#3#0#0#0#0#0#0#0#0#0 #0#0#0#0'´¼·'#4'@'#0#0#0'äþ‘'#5#0#0#0#0#0#0'‘'#5#$ 1E'ù'#0#0#0#0#0#0#0#0#0#0'üŸå'#4'¤så'#4'äþ‘'#5#0#0 #0#0'§*'#1#0#$1C'*å'#4#$1C'¡å'#4'L¥r'#4'´¼·'#4'œš¿ '#4'¬þ‘'#5#$1A'©'#3#0#0#0#0#0'¬®r'#4#$C'*r'#4'¤så' #4'ô'#2#0#0'8…å'#4#0#0#0
t1:'400'#0'«r'#4#$12'4280a400a334a0a-2aÿÿÃ'#$1C'1w_:'#4'º280'#0#0'r'#4'º280'#0#0
t2:''

Wieso gibt es keine Werte in t2? Bedeutet dies, dass t2 nicht in den Stack geladen wird bzw. kein Platz dafür reserviert wird? Wenn ja, was kann ich dann machen?
Dabei ist es egal welche strings ich dafür nutze.. anstatt der 5 strings habe ich auch einen benutzt doch der fehler ist der gleiche.
Ausserdem kriege ich es nicht hin eine setlength anweisung für strings erfolgreich zu compilieren. Mit SetLength(String;strlänge); geht es nicht.
Irgendwelche Ideen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz