Autor |
Beitrag |
basner
      
Beiträge: 39
|
Verfasst: Do 28.05.09 11:19
Hallo.
Vielleicht könnt Ihr mir helfen.
Ich habe eine Datei die normalen Text wie: "Das ist eine Frage" aber in dieser Datei befinden sich auch Steuerzeichen wie z.B: Chr(134) usw.
Diesen Text möchte ich ohne die Steuerzeichen in eine Richeditbox laden und anzeigen.
Könnt ihr mir einen Weg nennen wie ich das anstellen kann?
Bin für jede Hilfe dankbar.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 28.05.09 11:32
Hallo und  !
Du könntest den Text in eine Stringvariable legen, mit einer for-Schleife zeichenweise durchgehen und entweder bei allen Zeichen außer Buchstaben, Zahlen, usw. oder explizit bei den von dir gemeinten Zeichen diese durch ein Leerzeichen ersetzen. Delphi-Quelltext 1: 2: 3:
| for i := 1 to Length(DeinText) do if not (DeinText[i] in ['a'..'z', 'A'..'Z', 'ä', ...]) then DeinText[i] := ' '; | Bzw. eben umgekehrt.
|
|
basner 
      
Beiträge: 39
|
Verfasst: Do 28.05.09 11:40
Danke für die schnelle und gute Hilfe. Und was kann ich machen wenn ich nur bestimmte Steuerzeichen weg haben möchte?
Ich hoffe die Frage ist nicht zu dumm.

|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Do 28.05.09 11:46
Dann nimmst du das not weg und ersetzt die erlaubten Zeichen ( ['a'..'z', 'A'..'Z', 'ä', ...]) durch die nicht erlaubten Zeichen. 
|
|
basner 
      
Beiträge: 39
|
Verfasst: Do 28.05.09 13:38
Danke für die gute und schnelle Hilfe.
Das funktioniert jetzt alles. Nur bekomme ich nun eine Rang Exception oder Violation Exception.
Hier mal das komplette Codestück
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| If opendialog1.Execute then
begin
i:=0; assignfile(datei,opendialog1.FileName); reset(datei); while not eof(datei) do begin if i=0 then begin readln(datei, s);
for i := 1 to Length(s) do
if not(s[i] in ['a'..'z', 'A'..'Z', '0'..'9', 'ä', '.', ',']) then s[i] := ';';
end;
end else begin readln(datei, s[i- 1]); RichEdit1.Lines.Add(s+#13#10); i:=+1;
end;
end;
closefile(datei); end;
Except Application.MessageBox('Beim einlesen der Datei ist ein Fehler aufgetreten.','',MB_OK + MB_ICONERROR) End; |
Vielen Dank
Moderiert von Gausi: Code- durch Delphi-Tags ersetzt
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 28.05.09 13:50
Rück ordentlich ein, dann siehst du auch wo dein Fehler liegt... Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| if OpenDialog1.Execute then begin i := 0; AssignFile(datei, OpenDialog1.FileName); reset(datei); while not eof(datei) do begin if i = 0 then begin readln(datei, s);
for i := 1 to Length(s) do if not(s[i] in ['a'..'z', 'A'..'Z', '0'..'9', 'ä', '.', ',']) then s[i] := ';'; end; end else begin readln(datei, s[i- 1]); RichEdit1.Lines.Add(s+#13#10); i := +1; end; end; closefile(datei); end; Except Application.MessageBox('Beim einlesen der Datei ist ein Fehler aufgetreten.','',MB_OK + MB_ICONERROR) End; |
|
|
basner 
      
Beiträge: 39
|
Verfasst: Do 28.05.09 13:54
Danke habe das Else komplett entfernt aber der Fehler besteht weiterhin. hmm....
Leider habe ich dann noch ein zweites Problem, die Datei die dargestellt werden soll ist 17 MB groß, aber es werden nur ein paar Zeilen eingelesen.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 28.05.09 14:22
Wofür überhaupt das if? Da du nach der Schleife nicht weißt welchen Wert i hat, ist das doch ohnehin Glücksspiel.
Aufgrund der Optimierung wird i vermutlich nach der Schleife 0 sein, da die Schleife rückwärts läuft. Definiert ist der Wert einer Schleifenvariablen nach der Schleife schlicht gar nicht.
Und wenn es 0 ist, machst mit dem s nix.
// EDIT:
Und was erwartest du was readln(datei, s[i- 1]); tut?
Und warum weist du i immer den Wert 1 zu?
|
|
basner 
      
Beiträge: 39
|
Verfasst: Do 28.05.09 14:41
Wäre es möglich das du mir den Code kurz umstellst das es funktioniert. Habe erst angefangen mit Delphie.
Und so könnt ich die Fehler genau sehen.
Vielen Dank.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 28.05.09 14:53
Das Problem ist die Größe der Datei. Das dauert vermutlich ewig auf normalem Weg. Ein Versuch: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| var FileStream: TFileStream; FileContents: AnsiString; CurrentBuffer: PAnsiChar; begin FileStream := TFileStream.Create('...', fmOpenRead); try SetLength(FileContents, FileStream.Size); FielStream.ReadBuffer(PAnsiChar(FileContents)^, FileStream.Size); CurrentBuffer := PAnsiChar(FileContents); for i := 1 to Length(FileContents) do begin if CurrentBuffer^ in [#134, ';'] then CurrentBuffer^ := ' '; Inc(CurrentBuffer); end; RichEdit1.Lines.Text := FileContents; finally FileStream.Free; end; end; | Ich hoffe ich habe mich nirgends vertan.
|
|
basner 
      
Beiträge: 39
|
Verfasst: Do 28.05.09 15:01
Und in Verbindung mit OpenfileDialog?
Und habe ich es richtig verstanden, das du in deinem Code nur ein Chr abfragst oder gibt es da wieder die Möglichkeit mehrere Abzufragen?
//EDIT
Hatte noch das gefunden kann es aber nicht in Verbindung bringen, vielleicht kann man es ja in die source einbauen
SA: array[136..256] of char;
Zuletzt bearbeitet von basner am Do 28.05.09 15:04, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 28.05.09 15:04
Ich frage bei mir ab, ob es sich um das von dir genannte Zeichen 134 oder ; ist, und wenn ja, ersetze ich es durch ein Leerzeichen. Die Liste der Trennzeichen kannst du ja erweitern oder die Abfrage wie oben negieren, wenn du die erlaubten statt der Trennzeichen angeben willst.
Und den Dialog musst du ja nur dazusetzen, um den Dateinamen zu haben. Den habe ich bei mir ja freigelassen...
|
|
|