![]() |
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? |
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
|
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. |
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? |
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) |
Re: String-Problem
Moin Seddto,
Zitat:
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; |
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? |
Re: String-Problem
mit stingreplace sollte es gehen
beim alten zeichen gibst du #0 an und ersetzt das durch ' ' |
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? |
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
|
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 ;) ) |
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 :(
|
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);
|
Re: String-Problem
Danke Danke Danke Danke Danke Danke Danke Danke Danke :)) Geht!!
|
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)? |
Re: String-Problem
Moin Seddto,
Zitat:
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