Habe seit einiges Jahren Pause mal wieder bissl angefangen mein Programm fertig zustellen.
Nun speicher ich Dateien und Frage mich, mit welchem "Zeichen" sollte ich den Text trennen.
Im moment sieht es so aus:
Nunja, bin der Meinung das dies nicht so super ist. Gerade aus dem Grund, dass teilweise Texte selbst erstellt werden können.
Und wer verbietet dann ein komma zu setzen? Das will ich nicht verbieten und genauso nicht, dass man kein "\n" mehr schreiben darf...
Also was für Zeichen kann ich da nehmen?! :-/
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Ich würde im Gegenteil zu einem Zeichen unter #32 raten. (#32 ist das Leerzeichen). Alle Zeichen, die kleiner sind als #32 sind die "nicht druckbaren" Steuer-Zeichen. Für Textdateien hat man früher die Kombination #13 (=Zeilenvorschub) + #10 (=Wagenrücklauf) als Zeilenabschluss verwendet. Diese Bezeichnungen gehen auf die alten Zeilendrucker zurück, die sich an der Schreibmaschinentechnologie orientiert haben. Solche Dateien kann man mit jedem Texteditor öffnen.
Ein Pascal-Codeschnipsel:
Code:
// Writes a line to a textfile considering [chr13=line forwarding]
Mh, ja das ist mir schon klar, das ist ja im prinzip "ENTER" also neue zeile ...
Aber das will ich ja nicht... gibt es irgendwo sowas wie ne beschreibung zu den ganzen zeichen ...
will dann so ein nicht drückbares haben, das ist wohl das beste ... aber welches?
die #15 zB. oder wie?
Registriert: Di Sep 06, 2005 18:34 Beiträge: 362 Wohnort: Hamburg
Hi ...
du kannst doch auch sowas wie Feldbeschränkungen einfügen (doofes wort, keine ahnung wie man das nennen soll )
Also z.B. legst du fest, dass alles was zwischen zwei " " (Anführungszeichen) ein Feld ist, egal was da für Zeichen drin sind.
So können dann auch Texte in denen Kommata vorkommen in ein CSV Format eingefügt werden.
_________________ Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)
Ansonsten ist das mit den Textdateien so, daß unter Windows der Zeilenvorschub die Kombination #0D#0A ist (CR und LF . Wie bei der mechanischen Schreibmaschiene.. Den Hebel berühren und den träger (carriage) nach links schieben , bis an den rand und dann den hebel durchdrücken, dannzieht die Maschiene eine Zeile hoch: Zeilenvorschub). Die meisten Unixe benutzen nur LF, also #0A und der Mac benutzt nur CR: #0D. Ansonsten war da oben galub irgendwo die nummern für CR und LF vertauscht
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Zitat:
Ansonsten war da oben galub irgendwo die nummern für CR und LF vertauscht
Ja, hast recht, sind vertauscht. Also, Richtigstellung: #10 = line feed, #13 = carriage return. Muss wohl schon ziemlich spätabends gewesen sein, als ich das gecoded habe.
Infos dazu über Google. Das Web wimmelt nur so von ASCII-Tabellen.
Am besten keine \r\n zum trennen der daten verwenden, da es recht schnell mal vorkommt, das ein editor diese verändert. Manchmal kommt XML recht gut in frage, zumal es auf später noch erlaubt ein XML framework zu verwenden.
Ansonsten haben sich die Anführungszeichen "" und \" für den fall das es innerhal dieser Zeichen stehen muss bewährt. Alternativ kann man auch zu einem Ascci Zeichen greifen, welches in den Daten verboten ist. Denkbare beispiele wären § # oder das Leerzeichen (besonders für Zahlenlisten)
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Wenn du bei einfachen Textdateien bleiben willst, empfehle ich dir das, was schon von einigen Vorgängern gesagt wurde, ich präzisiere:
Du trennst deine Zeilen erstmal ganz normal mit Zeilenumbruch.
Deine Felder trennst du durch Kommata, Textfelder kommen in Anführungszeichen.
Wenn in einem Text ein Anführungszeichen vorkommt, wird da ein \ (#92, Backslash) vorgesetzt.
Wenn in einem Text ein Zeilenumbruch vorkommt, so wird dieser durch \n ersetzt.
Wenn in einem Text ein \ vorkommt, so wird es durch \\ ersetzt.
Damit dürftest du ganz gut fahren und bist für alle Fälle gewappnet. Du musst halt nur beim Auslesen die umgewandelten Zeichen wieder zurückkonvertieren, damit der Benutzer da nicht sowas stehen hat wie: "Hallo,\n wie geht es Ihnen?"
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Also das mit den blöcken, also mit " ist ja ne gute idee, nur halt nicht für die zeilen umbrüche ... aber für die kommas danke schonmal dafür ...
und zu den Zeichen ... die gehen leider nur bis : 111 1110 176 126 7E ~
Nunja, was kommt danach, da kommen doch sicher einige zeichen die man nicht brauch, dann verbiete ich das eine einfach, aber nicht sowelche die man öfter mal benutzt... :-/ ich denk mal ich nehm diese hier:
Code:
ﻟ
Danke aber an alle ... super!
EDIT: oh die letzten 2 posts habe ich nicht gesehen ... ja daran habe ich nicht gedacht mit " \" \ \\ usw ... das ist eigtl. perfekt. danke allen nochmal
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Halte ich nicht für so gut, die Idee.
Mit XML bist du definitiv auf der besseren Seite, da das Format erstmal Unicode Kompatibel ist, es schon ne menge guter Parser gibt und das Format einfach extrem Flexibel ist.
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Das mag zwar sein, dass das XML-Format all dies hat, aber man braucht es vielleicht nicht immer. Für so eine kleine Liste oder Datenbank wird das komplett angemessen sein.
Auch sind die meisten XML-Parser viel zu riesig, libxml2 zum beispiel, sich da einzuarbeiten, nur um mal schnell was kleines zu Programmieren, ist echt overhead. Auch kann man, wenn man z.B. mit Delphi programmiert, mit dem Unicode support häufig nicht so viel anfangen, weil Delphi nunmal weder UTF-8 noch UCS-2 wirklich beherrscht (ok, Delphi an sich vielleicht, aber die Komponenten kommen damit nicht wirklich klar).
Selbst wenn man Unicode bräuchte, dürfte das garnicht so schwer werden, mit nen paar Umwandlungsroutinen (gibts übrigens OpenSource bei FPC dabei) das auch in dieses 2D-Listenformat zu bringen.
XML ist meiner Meinung nach für so eine einfache 2D Liste auch vom Platz her und vom aufwand, sowas zu schreiben, viel zu übertrieben. Man muss häufig diese &entity;-Schreibweise verwenden, jeden Listeneintrag mit allen Tags ausstatten und so. Ich denke, für diese einfache Art der Liste mit nen paar Zahlen und vielleicht nem Dateipfad ist XML übertrieben.
Grundsätzlich ist XML natürlich toll, man kann eine Menge damit anstellen, vorallem, wenns um komplexe Baumdatenstrukturen geht. Zum beispiel für nen Techtree oder so, da ist XML durchaus lohnenswert, vorallem, wenn man dazu nen DTD macht und sich die ganzen Checks vom Parse abnehmen lässt.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Also ich hab zwar noch nichts verändert, aber trotzdem erstmal so hier rein
"salo" steht für save load, mir ist nichts anderes eingefallen evtl fällt euch was ein hehe...
nun, man kann dann erstmal weil es einfach nur an meine bedürfnisse angepasst ist und nichts momentan unnötiges drin steht auch nicht viel mach, ABER:
man kann ...
- saloparser erstellen (.create;)
- neue "linie" erzeigen (.NewLine;)
- neues "item" hinzufügen (.AddItem(inhalt: string);
kann man dann beliebig viele items in beliebig viele "linien" hinzufügen
- speichern (.Save(Filename: string);)
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.