AGB  ·  Datenschutz  ·  Impressum  







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

String in einem Stream schreiben

Ein Thema von reef · begonnen am 8. Mär 2013 · letzter Beitrag vom 8. Mär 2013
Antwort Antwort
Seite 1 von 2  1 2      
reef

Registriert seit: 8. Mär 2013
1 Beiträge
 
#1

String in einem Stream schreiben

  Alt 8. Mär 2013, 12:30
Delphi-Version: 5
Hallo zusammen,

bin neu hier und habe ein paar Fragen zu "String in einem TFileStream schreiben". Die Datei wird zwar geschrieben, nur steht in dieser Datei nicht das, was ich möchte, sondern merkwürdige Zeichen. Ich nutze Delphi XE 2. Hängt das mit dem Unicode zusammen? Was mache ich da falsch?

Delphi-Quellcode:
procedure TForm4.Button1Click(Sender: TObject);
begin
  //comport1.CustomBaudRate := 57600;
  comport1.Open;
  Fstream := TFilestream.Create(ExtractFileDir(ParamStr(0)) + '\test.dat', fmcreate);
  timer1.Enabled := True;
end;

procedure TForm4.Button2Click(Sender: TObject);
begin
  timer1.Enabled := False;
  comport1.close;
  if assigned(FStream) then
  begin
    FStream.Free;
  end;
end;

procedure TForm4.ComPort1RxChar(Sender: TObject; Count: Integer);
var
  Str: String;
begin
  ComPort1.Readstr(Str, Count);
  Fstream.WriteBuffer(Str, Count);
end;

procedure TForm4.Timer1Timer(Sender: TObject);
var
  Str: String;
begin
  Str := '1234';
  ComPort1.WriteStr(Str);
end;
Schönen Dank für Eure Hilfe.

Gruß
Ralf
Ralf
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: String in einem Stream schreiben

  Alt 8. Mär 2013, 12:33
Vermutlich. Deklariere ml str als AnsiString.
Markus Kinzler
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#3

AW: String in einem Stream schreiben

  Alt 8. Mär 2013, 12:37
Wäre nicht RawByteString passender als AnsiString?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: String in einem Stream schreiben

  Alt 8. Mär 2013, 12:39
@CCRDude im Zusammenhang mit einem Comport dürfte AnsiString wahrscheinlicher sein...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#5

AW: String in einem Stream schreiben

  Alt 8. Mär 2013, 12:44
Soweit ich verstanden habe, verwendet RawByteString keinerlei codeseitenspezifische Konvertierung bei Zuweisungen, AnsiString schon.

Gerade bei einer seriellen Schnittstelle würde ich nicht zwingend reine Textdaten erwarten, sondern auch Steuerzeichen.

Ich hatb neulich mal länger an einem Problem gesessen, wo eine teure Fremdkomponente Binärdaten in einen AnsiString gelesen und mit einer AnsiString-Konstante verglichen hat. Lief super - nur nicht auf z.B russischen oder japanischen Systemen, da ist der String-Vergleich bei gleichen Bytes (in Roh-Ansicht zeigte der Debugger das) in die Hose gegangen, weil sie im AnsiString als andere Zeichen interpretiert wurden als in der Konstante.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#6

AW: String in einem Stream schreiben

  Alt 8. Mär 2013, 12:56
Soweit ich verstanden habe, verwendet RawByteString keinerlei codeseitenspezifische Konvertierung bei Zuweisungen, AnsiString schon.
RawByteString oder TBytes bevorzuge ich bei Binärdaten und strings, deren Encoding noch nicht bekannt ist, auch. Über RawByteString schrieb Allen Bauer, es sei ursprünglich nur als Codepageloser Datentyp für Prozedur- und Funktionsparameter gedacht gewesen ("RawByteString was intended to be used only as a function parameter"). - http://stackoverflow.com/questions/6...-vs-ansistring
Was zu der Frage führt ob die Verwendung von RawByteString für anderes als "bad practice" angesehen wird.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: String in einem Stream schreiben

  Alt 8. Mär 2013, 12:58
@CCRDude Du hast Recht, sorry ich war falsch abgebogen ....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: String in einem Stream schreiben

  Alt 8. Mär 2013, 13:02
Solange da nichts interpretiert (angezeigt) wird ist das doch Pott wie Deckel oder nicht?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#9

AW: String in einem Stream schreiben

  Alt 8. Mär 2013, 13:08
Solange da nichts interpretiert (angezeigt) wird ist das doch Pott wie Deckel oder nicht?
Interpretiert wird nicht nur bei der Anzeige, sondern schon bei der Zuweisung z.B. an string / AnsiString Variablen. Dann erscheinen "Fragezeichen" für nicht interpretierbare Zeichen/Zeichenfolgen.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

AW: String in einem Stream schreiben

  Alt 8. Mär 2013, 13:12
Der Grund dürfte sein das du nicht den Inhalt des Strings schreibst sondern den String selbst:
Fstream.WriteBuffer(Str, Count); Wenn du ein SizeOf(Str) aufrufst wirst du sehen das der String immer 4 Bytes groß ist. Wenn du den Inhalt des Strings schreiben willst musst du Str[1] übergeben (die Referenz auf das erste Zeichen)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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 01:09 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