Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi String-Problem (https://www.delphipraxis.net/21398-string-problem.html)

seddto1977 2. Mai 2004 12:47


String-Problem
 
Hallo,

Ich möchte aus einer TextDatei folgende Zeichen in einen String einlesen:


ð*º    `0wÜ “Õ4?q4$

Nach dem Einlesen steht in dem String folgendes:
ð*º'#0#0#0#0#0#0#0#$17#0#0#0#$

Wie kann ich den String wieder so umwandeln das darin auch der Text steht der wirklich in der Datei steht?

SirThornberry 2. Mai 2004 12:57

Re: String-Problem
 
Ich bin mir ziemlich sicher das in dem String immer noch das steht was auch in der Datei steht. #0 heißt einfach nur Ascii-zeichen 0 - und weil das ein nicht darstellbares zeichen ist wird es dir beim hint etc. in delphi als #0 dargestelt. Word etc. stellen diese zeichen als viereck dar... aber du wirst sehen wenn du es in die datei zurück schreibst das immer noch das gleiche drin steht

Christian Seehase 2. Mai 2004 13:14

Re: String-Problem
 
Moin Seddto,

wenn ich mir den Inhalt des Strings so anschaue habe ich ernste Zweifel, dass es sich um eine Textdatei handelt.
Ausser bei einer Unicodedatei (oder Multibyte) dürften die nämlich keine binären Nullen enthalten.
Bei Unicode wäre es höchstens jedes zweite.

seddto1977 2. Mai 2004 13:21

Re: String-Problem
 
Doch ist eine von mir erstellte Textdatei...
Jetzt habe ich aber noch folgendes Problem: Ich möchte den String, in den ich die Daten aus der textdatei geladen haben nach Wörtern durchsuchen. Jedes Wort beginnt mit dem Zeichen ':' Dann folgen die Wörter in diesem Format: D E L P H I P R A X I S. Wenn ich jetzt den String durchsuche hat es aber dieses Format: D#0E#0L#0P#0H#0 usw.. am Ende des Strings kommen immer 2 Leerzeichen also #0#0
Wenn ich mir jetzt das zeichen im String für (Pos('D', Stringname) + 1 ausgeben lasse erhalte ich '#0' (in der Watch liste). Wenn ich jetzt aber eine Schleife nach dem Motto Schreibe While(Pos('D', Stringname) + 1 = '#0') ist die Bedingung falsch und die Schleife wird übersprungen :( Was mache ich falsch?

himitsu 2. Mai 2004 13:31

Re: String-Problem
 
Also entweder du entscheidest dich die Datei im Ansi-Format abzuspeichern, oder du muß die Datei in einen WideSting laden (der ist Unicode).

PS: der String von dort oben ist auf jeden Fall nicht aus einer Textdatei (kein ANSI, UTF-8, oder Unicode)

Christian Seehase 2. Mai 2004 13:31

Re: String-Problem
 
Moin Seddto,

Zitat:

Zitat von seddto1977
Doch ist eine von mir erstellte Textdatei...
.....
Was mache ich falsch?

Ich vermute mal, dass Du die Datei nicht richtig erstellst.

Das sieht nämlich so aus, als würdest Du nicht den String speichern, sondern Pointer.

Beispiel:

Delphi-Quellcode:
var
  fsWork : TFileStream;
  sWork : string;

begin
  sWork := 'Teststring';

  // Der Pointer auf den Inhalt von sWork und das
  // was im Speicher dahintersteht werden gespeichert
  fsWork := TFileStream.Create('c:\temp\test1.txt',fmCreate);
  try
    fsWork.Write(sWork,length(sWork));
  finally
    FreeAndNil(fsWork);
  end;

  // Der String wird gespeichert
  fsWork := TFileStream.Create('c:\temp\test2.txt',fmCreate);
  try
    fsWork.Write(sWork[1],length(sWork));
  finally
    FreeAndNil(fsWork);
  end;
end;

seddto1977 2. Mai 2004 13:36

Re: String-Problem
 
hi Christian
Nein...die Datei ist richtig erstellt und das ist nicht das Problem. Es geht mir darum die in den String eingelesenen Daten so umzuwandeln das ich die Namen wieder rauskriege. By the way...wenn ich die Datei mit dem windows-editor aufmache werden die #0 als Leerzeichen dargestellt. Wenn das geht würde ich das so auch gerne in meinem Delphi-String haben...Weiss jemand wie ich das mache?

SirThornberry 2. Mai 2004 13:39

Re: String-Problem
 
mit stingreplace sollte es gehen
beim alten zeichen gibst du #0 an und ersetzt das durch ' '

Christian Seehase 2. Mai 2004 13:40

Re: String-Problem
 
Moin Seddto,

dann hast Du wohl einen WideString geschrieben, und müsstest ihn auch wieder so einlesen.
Allerdings passt das nach wie vor nicht mit Deinem Beispiel aus dem ersten Posting zusammen.

Wie speicherst/liest Du denn, und wie sehen die Deklarationen aus?

seddto1977 2. Mai 2004 13:56

Re: String-Problem
 
Stringreplace liefert leider dasselbe Ergebnis wie im ersten String (also #0) obwohl ich angegeben habe #0 mit ' ' ersetzen...Weiss echt langsam nicht mehr weiter


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:36 Uhr.
Seite 1 von 2  1 2      

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