AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Byte-toString Wandler

Ein Thema von Lord of Ghosts · begonnen am 3. Jan 2007 · letzter Beitrag vom 5. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
Lord of Ghosts

Registriert seit: 14. Aug 2006
18 Beiträge
 
Delphi 6 Personal
 
#1

Byte-toString Wandler

  Alt 3. Jan 2007, 19:29
Hallo ,

ich habe eine Frage zu dem Code , den ich letztens geschrieben habe , um Dateiübertragungen auf den
"alten" ( Delphi 6 ) Winsocks zu realisieren ( ich hab' das Versenden von Dateien auch schon mit
Streams ausprobiert , baer nach max. 740 KB hat die Übertragung jedesmal abgebrochen..ein paar
befreundete Programmierer meinten dazu , dass ich einfach auf Indy umsteigen soll , was aber
aufgrund der Größe des schon geschriebenen Codes für mich reichlich unpraktisch ist ...).

Zum besseren Verständnis beschreibe ich hier erstmal meine Methode dabei :

Da bei mir die Konvertierung von Dateien in Strings immer wieder felgeschlagen ist , habe ich mich
entschieden , die Datei auf der Byte Ebene auszulesen und diese Werte in einen String zu packen (
mit der kleinen Eigenheit , dass ich jeden Bytewert auf drei Stellen bringe , dann fällt mir das
auslesen am anderen Ende der Leitung leichter^^) , den ich dann mit
clientsocket.socket.sendtext("filestring")[i] verschicke und am anderen Ende auslese,in eine
Datei schreibe und dann ins ursprüngliche Format konvertiere.

Jetzt würde ich gerne wissen ob und wie man die Konvertierung von bytewerten zu einer Zeichenkette
optimieren kann und was man dafür tun muss , denn die Konvertierung von einer Datei zu einem String
dauert , wenn diese größer 1MB ist , schon ziemlich lange ( >3min. auf einem 300+ Athlon XP ) und
ich müsste diesen Prozess eigentlich noch um einiges beschleunigen...

Hier mein Konvertierungsquellkode :

var
fn:string; // filename
streamconv:Tstream; // Stream für die Originaldatei
countbytes:integer; // zur Positionskonrolle
readtostr:integer; // Buffer zum Lesen vom Stream
strbuffer:string; // für die Konvertierung vom Buffer ( Integer ) zum filestring ( String )
transferstr:string; // String für den endgültigen Dateitransfer

begin

streamconv:=Tfilestream.create(fn,fmopenread);
countbytes:=0;
transferstr:='';
repeat
begin

// setzen von countbytes
countbytes:=countbytes+1;
// lesen und umwandeln in string
streamconv.read(readtostr,1);
strbuffer:=inttostr(readtostr);
// formatieren
if length(strbuffer)=3 then
begin
transferstr:=transferstr+strbuffer;
strbuffer:='';
end
else
begin

if lengt(strbuffer)=2 then
begin
strbuffer:='0'+strbuffer;
transferstr:=transferstr+strbuffer;
strbuffer:='';
end;

if length(strbuffer)=1 then
begin
strbuffer:='00'+strbuffer;
transferstr:=transferstr+strbuffer;
strbuffer:='';
end;

if length(strbuffer)=0 then
begin
log.lines.add('error in file : '+fn+' @ pos : '+inttostr(countbytes));
strbuffer:='';
end;


end;

end;
until countbytes=streamconv.size;
streamconv.free;
countbytes:=0;
// verschicken
transferstr:='';



Ich wäre demjenigen , der mir ein bisschen weiterhelfen könnte wirklich sehr dankbar...


Mfg, Lord of Ghosts
Delphi rules ! More than C.....
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.757 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Byte-toString Wandler

  Alt 3. Jan 2007, 20:33
Guten Abend,

mir erschließt sich noch nicht so ganz der Sinn dieser Konvertierung
(ausser das 1/3 mehr Daten übertragen werden müßen).

Auf der Übertragungsebene ist es doch egal ob Strings,Chars oder Bytes übertragen werden.
Es kommt doch nur darauf an wie die Daten auf Empfängerseite betrachtet werden müssen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Lord of Ghosts

Registriert seit: 14. Aug 2006
18 Beiträge
 
Delphi 6 Personal
 
#3

Re: Byte-toString Wandler

  Alt 3. Jan 2007, 20:47
Hallo Klaus ,

THX für die Antwort auf jeden Fall erstmal. Der Sinn dieser Konvertierung ist "simpel" (naja) :

Übertragung mit Streams funktioniert nicht , die Umsetzung einer anderen
Konvertierung war mir nicht möglich und der Quellkode des Programms ist zu groß , um ihn einfach
in Delphi2006 nochmal mit den Indies zu schreiben ( Delphi7 hab' ich nicht ) .

Deshalb musste ich auf diese seltsame Methode zurückgreifen ... schlicht mir ist nichts anderes mehr
eingefallen..

Wenn du einen anderen ( möglicherweise schnelleren )Code kennst , könntest du ihn bitte posten ( oder
ein Tutorial , dass sich mit der Übertragung von Streams auf der Basis von Delphi6-Socket-Komponenten
auseinandersetzt ) ?

THx im Voraus..
Lord of Ghosts

P.S.: Ich bin eigentlich ein ziemlicher Anfänger was das Programmieren angeht ( mach's erst seit ein
paar Jahren ,aber nicht so intensiv, und bin deshalb auch für jeglicherlei Verbesserungsvorschläge
offen..)
Delphi rules ! More than C.....
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#4

Re: Byte-toString Wandler

  Alt 3. Jan 2007, 20:51
Zitat von Lord of Ghosts:
ich hab' das Versenden von Dateien auch schon mit
Streams ausprobiert , baer nach max. 740 KB hat die Übertragung jedesmal abgebrochen..ein paar
befreundete Programmierer meinten dazu , dass ich einfach auf Indy umsteigen soll
Joar, dann verschick' die Datei doch einfach in 700KB - Stücken, und lass Sie vom Client entsprechend zusammensetzen.... Und damit das alles nicht so lange dauert, machste halt noch 1,2 Ports zusätzlich auf... Google einfach mal in diese Richtung. Ich arbeite zwar nicht mit TClient/TServerSocket, aber wenn du sagst, ~700KB macht er mit...
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.106 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Byte-toString Wandler

  Alt 3. Jan 2007, 22:06
Moin Lord,

und wenn Du schon wandelst, warum dann nicht in Hex-Werte?
Dass spart dann doch Platz.
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
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.757 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Byte-toString Wandler

  Alt 4. Jan 2007, 07:52
Delphi-Quellcode:
repeat
begin
end;
  // setzen von countbytes
  countbytes:=countbytes+1;
  // lesen und umwandeln in string
  streamconv.read(readtostr,1);
  strbuffer:=inttostr(readtostr);
  // formatieren

  if length(strbuffer)=3 then
    begin
      transferstr:=transferstr+strbuffer;
      strbuffer:='';
    end
  else
    begin
     if lengt(strbuffer)=2 then
       begin
         strbuffer:='0'+strbuffer;
         transferstr:=transferstr+strbuffer;
         strbuffer:='';
       end;

     if length(strbuffer)=1 then
       begin
         strbuffer:='00'+strbuffer;
         transferstr:=transferstr+strbuffer;
         strbuffer:='';
       end;

     if length(strbuffer)=0 then
       begin
         log.lines.add('error in file : '+fn+' @ pos : '+inttostr(countbytes));
         strbuffer:='';
       end;
    end;

end;
until countbytes=streamconv.size;


Delphi-Quellcode:
repeat
  begin
    // setzen von countbytes
    countbytes:=countbytes+1;

    // lesen und umwandeln in string
    streamconv.read(readtostr,1);
    strbuffer:=inttostr(readtostr);
    if length(strbuffer)=0 then
       begin
         log.lines.add('error in file : '+fn+' @ pos : '+inttostr(countbytes));
         strbuffer:='';
       end
    else
      begin
        while length(strbuffer) < 3 do
          strbuffer:='0'+strbuffer;
        transferstr:=transferstr+strbuffer;
      end;
  end;
until countbytes=streamconv.size;
Nun, ob der Code schneller ist weiß ich nicht, kürzer ist er jedenfalls.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Lord of Ghosts

Registriert seit: 14. Aug 2006
18 Beiträge
 
Delphi 6 Personal
 
#7

Re: Byte-toString Wandler

  Alt 4. Jan 2007, 19:04
Hallo an alle ,

Thanks für die Tipps von allen , die geschrieben haben .

@Daniel : Dass Problem ist nur : Ich weiß nicht wie man dass macht , ich bräuchte eine
"fertige" Funktion dafür , die ich einbauen kann. Hatte ich schon mal probiert :
hat nicht geklappt , ich muß mich noch ein bisschen damit auseinandersetzen , bis
ich so was kan und bis dahin bin ich dann auch auf die anderen Netzwerkkomponenten
( indy 10 oder höher ) umgestiegen , aber danke...


@Christian : Tja , ist mir bekannt , kann ich aber nicht ( was allerdings ein Problem ist ... )
d.h.: ich kann in Hex-Konvertieren aber nicht zurück...
Danke aber trotzdem !

@Klaus : Vielen ,vielen Dank für den Code , ich werde ihn mal ausprobieren und dir dann vlt. eine
Rückmeldung geben !

Mfg an alle ,

Lord of Ghosts
Delphi rules ! More than C.....
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.106 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Byte-toString Wandler

  Alt 4. Jan 2007, 22:02
Moin Lord,

Zitat von Lord of Ghosts:
ich kann in Hex-Konvertieren aber nicht zurück...


Wieso denn nicht?
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
Lord of Ghosts

Registriert seit: 14. Aug 2006
18 Beiträge
 
Delphi 6 Personal
 
#9

Re: Byte-toString Wandler

  Alt 5. Jan 2007, 15:37
Weil ich die Funktion dazu nicht selbst geschrieben habe...
( zum Wandeln in Hex )

Lord of Ghosts
Delphi rules ! More than C.....
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

Re: Byte-toString Wandler

  Alt 5. Jan 2007, 16:00
Zitat von Lord of Ghosts:
d.h.: ich kann in Hex-Konvertieren aber nicht zurück...
Armer Bub ( ), kuck mal hier:
http://www.delphipraxis.net/internal...ct.php?t=46356
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:48 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