AGB  ·  Datenschutz  ·  Impressum  







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

Memo.Text := Ansistring? nur wie

Ein Thema von emsländer · begonnen am 7. Jan 2009 · letzter Beitrag vom 7. Jan 2009
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Memo.Text := Ansistring? nur wie

  Alt 7. Jan 2009, 16:15
Salvete,

Ich bekomme wegen dem Ansikram graue Haare.
Wie bekomme ich den Inhalt eines Ansistring in z.B. Memo.text oder eine normale string-Variable und umgekehrt?

D2009 ist da ja recht brutal!

Gruss

EL


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Memo.Text := Ansistring? nur wie

  Alt 7. Jan 2009, 16:23
Ich würde es mit move probieren. Wenn der String jedoch ein Unicodestring ist sollte es mit CharToWideChar oder so ähnlich funktionieren.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Memo.Text := Ansistring? nur wie

  Alt 7. Jan 2009, 16:32
Du kannst einer Stringvariablen problemlos einen AnsiString zuweisen. Umgekehrt kann es natürlich Probleme geben
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#4

Re: Memo.Text := Ansistring? nur wie

  Alt 7. Jan 2009, 16:45
Zitat von mkinzler:
Du kannst einer Stringvariablen problemlos einen AnsiString zuweisen. Umgekehrt kann es natürlich Probleme geben
nö - geht in der Form leider nicht. Da kommt nur MMüll bei rum, weil der Inhalt des Ansistrings ein verschlüsseter Text ist!

auch mit move geht es nicht - kracht mit einer Access Violation weg.

Delphi-Quellcode:
  if odlg.Execute then begin
    fs := TFileStream.Create(odlg.FileName, fmOpenRead    or fmShareDenyWrite);
    fs.Position := 0; // File in den String-Stream schreiben
    sstream := TStringStream.Create;
    sStream.CopyFrom(fs,fs.size);
    ansitmp := sStream.DataString;
    move(ansitmp,stmp,length(ansitmp));
    memo1.text := stmp;
    freeandnil(sstream);
    freeandnil(fs);
  end;
wie bringe ich das in eine lauffähige Version?

Gruss

EL


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Memo.Text := Ansistring? nur wie

  Alt 7. Jan 2009, 17:30
Zitat von emsländer:
nö - geht in der Form leider nicht. Da kommt nur MMüll bei rum, weil der Inhalt des Ansistrings ein verschlüsseter Text ist!
Kann es sein, dass die Zeichenkette nicht darstellbare Zeichen, wie zum Beispiel Steuerzeichen, enthält?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: Memo.Text := Ansistring? nur wie

  Alt 7. Jan 2009, 17:31
[quote="emsländer"]
Delphi-Quellcode:
  if odlg.Execute then begin
    fs := TFileStream.Create(odlg.FileName, fmOpenRead    or fmShareDenyWrite);
    fs.Position := 0; // File in den String-Stream schreiben
Das ist ja wie "Query.Open;Query.First". Wo steht man denn wohl, wenn man die Datei gerade geöffnet hat.


Zitat:
    sstream := TStringStream.Create;
TStringStream ist bereits ein Unicode-String-Stream. Das wird so also nicht klappen, außer du hast einen UTF16 Text in der Datei.

Warum nicht einfach so einlesen:
Delphi-Quellcode:
var
  Stream: TFileStream;
  AnsiTemp: AnsiString;
begin
  ...
  Stream := TFileStream.Create(odlg.FileName, fmOpenRead or fmShareDenyWrite);
  try
    SetLength(AnsiTemp, Stream.Size);
    if AnsiTemp <> 'then
      Stream.Read(AnsiTemp[1], Stream.Size);
  finally
    Stream.Free;
  end;

  Memo1.Lines.Text := string(AnsiTemp); // hier findet ein Aufruf von MultiByteToWideChar() statt
end;
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Memo.Text := Ansistring? nur wie

  Alt 7. Jan 2009, 17:36
das es bei move kracht liegt daran was du übergibst. Du übergibst ja sozusagen den Pointer und nicht das worauf dieser zeigt (Strings sind ja nicht die Daten an sich sondern ein Gebilde was auf Daten zeigt)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#8

Re: Memo.Text := Ansistring? nur wie

  Alt 7. Jan 2009, 17:43
Zitat von jbg:

Warum nicht einfach so einlesen:
Delphi-Quellcode:
var
  Stream: TFileStream;
  AnsiTemp: AnsiString;
begin
  ...
  Stream := TFileStream.Create(odlg.FileName, fmOpenRead or fmShareDenyWrite);
  try
    SetLength(AnsiTemp, Stream.Size);
    if AnsiTemp <> 'then
      Stream.Read(AnsiTemp[1], Stream.Size);
  finally
    Stream.Free;
  end;

  Memo1.Lines.Text := string(AnsiTemp); // hier findet ein Aufruf von MultiByteToWideChar() statt
end;
Auch das funktioniert nicht und ich habe nur das erste Zeichen von über 8000 im Memo.

Gruss

EL


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

Re: Memo.Text := Ansistring? nur wie

  Alt 7. Jan 2009, 17:48
Zitat von emsländer:
Auch das funktioniert nicht und ich habe nur das erste Zeichen von über 8000 im Memo.
Dann frage ich mal ganz dumm, was steht denn in der Datei (Hex-Edit) Wenn das zweite Zeichen ein #0 ist, dann ist klar, dass da nichts bei rauskommt.
  Mit Zitat antworten Zitat
Benutzerbild von emsländer
emsländer

Registriert seit: 21. Aug 2004
Ort: Lengerich
658 Beiträge
 
RAD-Studio 2009 Ent
 
#10

Re: Memo.Text := Ansistring? nur wie

  Alt 7. Jan 2009, 17:53
Zitat von jbg:
Zitat von emsländer:
Auch das funktioniert nicht und ich habe nur das erste Zeichen von über 8000 im Memo.
Dann frage ich mal ganz dumm, was steht denn in der Datei (Hex-Edit) Wenn das zweite Zeichen ein #0 ist, dann ist klar, dass da nichts bei rauskommt.
Das zweite Zeichen ist 0 - nur wenn ich die Datei wie vorher beschreiben eingelesen habe, dann war die komplett in dem AnsiString drin. Und das muss in einen normalen String rein. Das ging bei D2008 problemlos - ist ein älteres Projekt.

Gruss

EL


Narben am Körper sind ein Zeichen dafür, das man gelebt hat.
Narben auf der Seele sind ein Zeichen dafür, das man geliebt hat.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 12:05 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