Delphi-PRAXiS

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

Robert_G 2. Mai 2004 14:00

Re: String-Problem
 
Mich wundert gerade, dass in deinem String nach dem #0 noch irgendetwas anderes steht :gruebel:
Theor. müsste der String beim ersten #0 enden (ist ja schließlich null-terminated ;) )

seddto1977 2. Mai 2004 14:09

Re: String-Problem
 
Also im Text-editor von Windows werden die meisten #0 als leerzeichen dargestellt. Wie gesagt: Die #0 Zeichen in der Datei haben Ihre Richtigkeit und die frage wie sie darein gekommen sind, ist auch nicht Teil des Problems, dessen Lösung ich suche: Ich würde einfach nur gerne wissen wie ich die #0 zeichen in meinem String ansprechen kann, damit ich meine Namen wieder rausschneiden kann (denn per Pos('#0', Stringname) geht es ganz offensichtlich nicht). Im Variablen-Watch-Editor werden die zeichen zwar als '#0' dargestellt, aber wenn ich im String suchen lasse wird auf die Suche POS('#0', Stringname) nix gefunden :(

SirThornberry 2. Mai 2004 14:11

Re: String-Problem
 
lol, da hamm wir doch schon das problem #0 ist ein einzelnes zeichen - also #0 ist ungleich '#0'
Es sollte so aussehen
Delphi-Quellcode:
 POS(#0, Stringname); //nicht POS('#0', Stringname);

seddto1977 2. Mai 2004 14:20

Re: String-Problem
 
Danke Danke Danke Danke Danke Danke Danke Danke Danke :)) Geht!!

seddto1977 3. Mai 2004 15:07

Re: String-Problem
 
So habe jetzt noch ein Problem. Ich möchte eine Email-Adresse jetzt noch aus einer anderen Datei auslesen, die keine text Datei ist. Die Adressen sind in der Regel von irgendwelchen steuerzeichen (&%$/( oder son kram) begrenzt. Die Email-Adresse enthält keine Leerzeichen. Wenn ich die Datei jetzt in einem String einlesen, wie kann ich den Teilstring der die Email-Adresse enthält auslesen. Ich hätte folgende Idee. Ich suche mir mit Pos('@', Stringname) das erste @ Zeichen. In einer While do Schleife erhöhe ich die Pos im String jeweils um ein zeichen bis ein Zeichen gefunden wird, das kein Buchstabe, keine Zahl und kein Punkt und kein Unterstrich ist. Wenn ich das Ende gefunden habe gehe ich wieder zum @-Zeichen zurück und suche nach der gleichen Methode den Anfang.
Weiss jemand wie ich es mit Delphi hinkriege zu unterscheiden welche Art von zeichen ich gerade vor mir habe (Also zum Beispiel feststellen ob das aktuelle Zeichen im String weder ein Buchstabe, noch eine Zahl, noch ein punkt oder eine Unterstrich ist)?

Christian Seehase 3. Mai 2004 21:37

Re: String-Problem
 
Moin Seddto,

Zitat:

Zitat von seddto1977
So habe jetzt noch ein Problem.

Dann sei doch bitte so gut, und mache auch einen neuen Thread auf, denn hier gilt:
Neue Frage - Neuer Thread.
Danke.

Ausserdem entnehme ich Deiner Aussage, dass das Problem dieses Threads erledigt ist, was mich dazu veranlasst, ihn vorerst mal zu schliessen, um versehentliche Postings auf das neue Problem zu vermeiden.
Sollte es noch etwas zum ursprünglichen Thema ergänzen geben, kann der Thread natürlich gerne wieder geöffnet werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz