Autor |
Beitrag |
Uliversum63
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 18.11.09 17:34
Hallo Delphi-Freunde!
Will es kurz machen:
Mit dem Befehle readln(datei,zeile) kann ich eine einzelne Zeile nicht einlesen;
Anders als bei TP werden auch Zeichen nach dem Zeilenende gelesen??
Wordpad zeigt die Datei mit exaktem Zeilenumbruch an.
Zudem erscheinen in der Listbox überall da Hyroglyphen,
wo Umlaute oder 'ß' stehen sollten.
Meine Fragen wären:
1) Gibt es eine andere Möglichkeit des Zeilenauslesens?
- Mit read klappt es zwar, ist aber umständlich.
2) Beherrscht die Listbox nicht ohne Weiteres den entspr. Zeichensatz?
Habe in meinen Büchern- "GoTo Delphi 6" und "Delphi 6 in Team" nichts darüber finden können.
DANKE Euch im Voraus!!!
Uli
--- Moderiert von Narses: Beiträge zusammengefasst---
Nochmal ich:
Leider funktioniert meine Delphi-Hilfe überhaupt nicht!
Kommt sofort eine Error-Box.
Die Delphi 6-CD stammt aus einem Buch "Delphi for Kids 2"
Auch nach erneuter Install. keine Hilfe. Shit
|
|
Critter
      
Beiträge: 328
Erhaltene Danke: 3
Windows 7
Delphi 7 Pro.
|
Verfasst: Mi 18.11.09 18:04
Hallo,
wenn es darum geht den Text nur in eine Listbox zu bekommen, dann kannst du ihn auch direkt per ListBox1.Lines.LoadFromFile('Filename') laden.
Was die Codierung angeht ist es gut möglich, das die Delphi Komponenten diese nicht von Haus aus unterstützen, Delphi beherrscht z.B. erst in der neuesten Version Unicode Zeichensätze.
Du solltest hier im Forum viele Beiträge dazu finden. Einfach mal nach Unicede, UTF8, UTF16 usw. suchen. Je nachdem wie deine Datei geartet ist  .
critter
_________________ Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)
|
|
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 19.11.09 01:57
Uliversum63 hat folgendes geschrieben : | Leider funktioniert meine Delphi-Hilfe überhaupt nicht! |
Du hast nicht zufällig Vista?
www.delphi-library.d...ewtopic.php?p=544403
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Do 19.11.09 09:05
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Uliversum63 
Hält's aus hier
Beiträge: 11
|
Verfasst: So 22.11.09 20:15
Hallo Critter!
Dein Tip ist schon mal prima! In den einzulesenden Zeilen meiner Datei sind allerdings Datum, Uhrzeit, Tel.Nr. enthalten, alles fortlaufend formatiert.
Mit dem von Dir vorgeschlagenen Befehl kann ich wohl alle Zeilen in die ListBox einlesen, und es werden auch alle Zeilen mit CR abgeschlossen, doch möchte ich die o.g. Daten gerne getrennt ausgeben.
Die Formatierungen rausschmeißen. Denke, das muß ich wohl doch über readln machen und dann alles zerlegen.
Hallo jaenicke!
Ne, ich habe xp. Und trotzdem keine Hilfe.
DANKE EUCH ALLEN!!!
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
JoelH
      
Beiträge: 806
Erhaltene Danke: 17
Win10
Delphi Alexandria 11.2 Patch 1
|
Verfasst: Di 24.11.09 08:13
Wie jetzt? Willst du die Zeilen in einen Listbox einlesen oder nicht?
Wie ist denn so eine Zeile genau aufgebaut, welches Trennzeichen wird verwendet? Gib mal ein Beispiel.
Anscheinend magst du wo eine Zeile einlesen und dann nach einem bestimmten Trennzeichen in diverse "Zeilen" aufspalten oder wie?
Folgender Code liest eine TAB-getrennte Textdatei ein und schreibt die Items in eine Listbox. Leider klappt der Dateiupload nicht, ansonsten hätt ich das Projekt angehängt.
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: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81:
| unit main;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; OpenDialog1: TOpenDialog; procedure Button1Click(Sender: TObject); private function nextitem( var s_Text : String;var rueckgabe: string): boolean; public end;
const C_TRENNZEICHEN = #9; var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var sl : TStringlist; i : Integer; s, s2 : String; begin if opendialog1.execute then begin sl := TStringlist.Create; sl.clear; sl.LoadFromFile(opendialog1.FileName); for i := 0 to sl.Count - 1 do begin s := sl.Strings[i]; repeat if nextitem(s,s2) then listbox1.Items.add(s2); until s=''; end;
end;
end;
function TForm1.nextitem( var s_Text : String;var rueckgabe: string): boolean; var trennposition : Integer; itemfound : boolean; begin itemfound := false; trennposition := POS(C_TRENNZEICHEN,s_Text); if POS(C_TRENNZEICHEN,s_Text) > 0 then begin itemfound := true; rueckgabe := COPY(s_text,1,trennposition-1); if trennposition < length(s_Text) then s_Text := COPY(s_Text,trennposition+1, length(s_text)) else s_Text := ''; end else begin if length(s_text) > 0 then begin itemfound := true; rueckgabe := s_Text; s_Text := ''; end; end; result := itemfound; end;
end. |
_________________ mfg. Joel
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Di 24.11.09 13:34
Hey,
das würde ich dir so nich empfehlen, weil ich mir so mal mein komplettes Programm geschrottet hab un ewig nach dem Fehler suchen musste. Der fehler war dann das ganze rum kopieren der Strings...
machs doch so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure StrToList(str: String; List: TListBox); var j: Integer; var CurrentItem: String; const TRENNZEICHEN = #9; begin j := 1; CurrentItem := ''; while j < Length(str) do begin if str[j] <> TRENNZEICHEN then begin CurrentItem := CurrentItem + str[j]; end else begin List.Items.Add(CurrentItem); CurrentItem := ''; end; inc(j); end; if Length(CurrentItem) <> 0 then List.Items.Add(CurrentItem); end; |
@Lannes: ich seh dein Post gar nich oO
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Mi 25.11.09 08:32
Also ich steige da jetzt leider noch nicht so ganz durch, aber ich finde hier jetzt noch nicht die Standard-Lösung, das ganze erst mal in ein normales Memo zu laden und von da weiter auszulesen:
Delphi-Quelltext 1:
| MemoEinzulesendeDatei.Lines.LoadFromFile(OpenDialog1.FileName); |
Damit hättest Du zwar noch wieder eine (versteckare) visuelle Komponente mehr, von der ich aber immer denke, dass dadurch das Ganze übersichtlicher wird - zumal Du damit zur Probelaufzeit siehst, was darin abläuft, wenn Du sie noch auf Visible=True hast.
Und ich meine, dass Du dann doch nachher einfach
ListBox1.Items:=MemoEinzulesendeDatei.Lines
machen kannst.
...oder bin ich da jetzt gerade "auf dem Holzweg"?
Zuletzt bearbeitet von ffgorcky am Mi 25.11.09 08:37, insgesamt 1-mal bearbeitet
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mi 25.11.09 08:36
Hey,
wir wissen ja nich wie seine Daten aussehen... Un den vorschlag das ganze in ne ListBox zu laden kahm ja schon.
Das mit dem Memo zur Übersicht is ne gute Idee, wenn man das nachverfolgen will, da müsste man aber auch noch n Timer oder sowas einbauen, wenn man das wirklich verfolgen will, sonst flimmert es nur kurz un das neue Ergebnis steht ihm Memo
MfG Bergmann
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
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: Mi 25.11.09 10:02
ffgorcky hat folgendes geschrieben : | Damit hättest Du zwar noch wieder eine (versteckare) visuelle Komponente mehr, von der ich aber immer denke, dass dadurch das Ganze übersichtlicher wird - zumal Du damit zur Probelaufzeit siehst, was darin abläuft, wenn Du sie noch auf Visible=True hast. |
Solange man die danach durch eine TStringList ersetzt und nicht einfach nur die Komponente versteckt, ist das ja ok. Man kann dann auch ShowMessages z.B. einbauen um die Schritte erst bei Klick darauf fortzusetzen, dann sieht man was passiert. (Eigentlich eignet sich der Debugger dafür aber deutlich besser...)
Was die Performance angeht: die ist beim Test mit der Komponente dann natürlich extrem langsamer als später mit der TStringList, das hat da nicht so viel zu sagen.
Ach ja: Was die Umlaute usw. angeht. Da werfe ich einmal OemToChar und CharToOem in den Raum. Ich vermute die Datei ist als DOS-Datei gespeichert, dann kann man das damit umwandeln.
|
|
Critter
      
Beiträge: 328
Erhaltene Danke: 3
Windows 7
Delphi 7 Pro.
|
Verfasst: Mi 25.11.09 14:08
Hi,
keine Ahnung wie es den anderen geht, aber ich finde den Thread hier mittlerweile sehr verwirrend. Daher möchte ich dich ffgorcky bitten hier ein wenig Ordnung rein zu Bringen. Schön währe wenn du ein mal ein paar Zeilen aus der Import Datei hier posten könntest, damit wir anderen uns auch einen Eindruck von der Zeilenstruktur machen können. Ferner währe dann noch schön, wenn du beschreiben könntest, welchen Teil der jeweiligen Datenzeile du wo hin haben willst, Also z.B. die Nummer an Anfang in ListBox1, den String am Ende in ListBox2 und alles dazwischen kann ignoriert werden oder so.
Ich denke mit den Infos kann dir dann viel gezielter geholfen werden.
critter
_________________ Diejenigen, die grundlegende Freiheiten aufgeben, um ein wenig mehr vorrübergehende Sicherheit zu erkaufen, verdienen weder Freiheit noch Sicherheit.
(Benjamin Franklin;"The Papers of Benjamin Franklin", Vol. 6, Apr. 1, 1755, through Sep. 30, 1756)
|
|
Uliversum63 
Hält's aus hier
Beiträge: 11
|
Verfasst: Sa 28.11.09 23:30
Hallo Leute!
Danke Euch erstmal für die vielen Beiträge!
Im letzten wurde etwas treffendes erwähnt: der Thread ist mittlerwelie eher verwirrend geworden.
Inzwischen habe ich alles zerlegt, in Nummer, Datum, Uhrzeit usw. aufgegliedert und formatiert ausgegeben.
Soweit, Sogut.
Mir geht es 'nur' noch um die Entfernung der Hyroglyphrn!
Konnte bisher nichts hilfreiches dazu finden.
Hier ein Auszug aus der Quelldatei:
4917785033275";"";"";"2009.10.25 21:02";"";"Mußt Du denn morgen Frühschicht machen? Können ja noch telefonieren.
Das <Mußt> und <Frühschicht> und <Können> sind mit Hyroglyphen dargestellt,
die ich jetzt nicht so leicht nachstellen kann.
Die Formatierungen sind kein Problem, NUR die Umlaute und 'ß'.
Ist mir unbegreiflich, bei Delphi 2009!
Gruß Uli
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Sa 28.11.09 23:41
Woher kommt die Datei denn? Welches programm schreibt die?
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: So 29.11.09 00:16
Ich habe den Verdacht, das könnte ein Ascii/Ansi-Problem sein.  Selbst ohne zu wissen, wo die Daten genau herkommen :
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:
| function AsciiToAnsi(s: string): string; var i: integer; st : string; begin st := ''; if length (s) > 0 then begin for i := 0 to Length(s) do begin if s [i] <> #0 then begin case s[i] of #142: st := st + #196; #153: st := st + #214; #154: st := st + #220; #132: st := st + #228; #148: st := st + #246; #129: st := st + #252; #225: st := st + #223; else st := st + s[i]; end; end; end; end; AsciiToAnsi := st; end; |
Einfach mal ausprobieren. Lasse die Funktion mal auf dein <Frühschicht>, aber nicht das hier sondern das mit den "Hyroglyphen" los.
_________________ Gruß
Hansa
|
|
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: So 29.11.09 01:15
|
|
Uliversum63 
Hält's aus hier
Beiträge: 11
|
Verfasst: So 29.11.09 20:05
Da bin i wieder!
Hallo Delphi-Freunde!
Ja, des mit der case-Anweisung hatte ich schon vor, verstehe auch, wie das ablaufen muß. Doch hab ich die Idee noch nicht umgesetzt, denn für einen(!) Umlaut oder 'ß' stehen 2(!) Hyroglyphen. Müsste demnach die case-Anweisung verschachteln oder mit: Delphi-Quelltext 1:
| if (erster Hyroglyph=dieses) and (zweiter Hyroglyph=jenes) dann 'ß' .. | Es ist sicher alles machbar, mehr oder weniger zu Fuß. Ich kenne das von TP7. Aber ob es für all das nicht eine logische Erkärung gibt? Das modernste Delphi- aber kein erw. Zeichensatz??
Ich denke, ich versuche es noch etwas mit dem guten-alten-zu-Fuß-gehen.
Das Prog schreibe ich einfach für mich u. meine Freundin und so kommt es nicht so sehr darauf an.
DANKE EUCH SEHR!!!
Melde mich, wenn eine Lösung gefunden!
Gruß Uli!!
Moderiert von Narses: Delphi-Tags hinzugefügt
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
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: So 29.11.09 22:35
Uliversum63 hat folgendes geschrieben : | denn für einen(!) Umlaut oder 'ß'
stehen 2(!) Hyroglyphen. |
Dann versuche es einmal mit Utf8ToAnsi, Utf8Encode, usw. z.B., denn ich vermute, dass dann die Datei eine Unicodedatei ist. Schau einmal in einem Hexeditor an, ob am Anfang der Datei eine Unicodesignatur steht.
|
|
Uliversum63 
Hält's aus hier
Beiträge: 11
|
Verfasst: Di 01.12.09 12:08
Hallo jaenicke!
Habe inzwischen so ziemlich alle Hyrogl. verarbeiten können(case of), so daß fast alles korrekt dargestellt wird, 'nur' noch das gr. Ü u. gr. Ä, aber es ist zum Haare raufen, wenn ich bedenke, was Delphi für ein mächtiges und modernes Entw.-System ist und dann sowas.
Wenn es sich um einen Bug handeln sollte, gibt es dafür doch sicher einen Patch im Inet?
Wie in einem meiner anderen Themen beschrieben(da habe ich auch Quellcode drin), würde ich die Datei gerne so verarbeiten, wie sie daher kommt, ohne daß ich als Anwender vorher die Dat. im Unicode abspeichern muß.
Es gibt sicher die Möglichkeit, per code die Dat. im Unicode zu speichern u. dann zu verarbeiten. Aber ich habe bisher nur Dateien geöffnet u. gespeichert, aber nicht als Unicode.
Gruß Uli
Moderiert von Narses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Di 01.12.09 13:38
Hey,
Uliversum63 hat folgendes geschrieben : | Wenn es sich um einen Bug handeln sollte, gibt es dafür doch sicher einen Patch im Inet? |
Ich glaub nich, dass das ein Bug ist, er zeigt halt nur an was du ihm zu fressen gibts  der PC kann ja nich wissen, wie die Daten formatiert sind, das musst du ihm schon sagen...
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
|