Chris: Welchen Separator für Datenfeldtrennung?

Hallo zusammen,
Nach dem ich viele Jahre mit Programmiersprachen gearbeitet habe, in denen man relationale Datenbanken (Zugriff über eindeutige Schlüssel) angewendet hat, habe ich mich nun nach und nach in die Web-Programmierung mit HTML, Javascript und nun Perl eingearbeitet. PHP besteht mir noch bevor. Das Arbeiten mit den Skalaren, Arrays (in Perl Listen) und Hashes ist sehr komfortabel und  flexibel. Jedoch das Speichern und Lesen von Daten in und aus Dateien mit Perl erinnert  mich an die alten MS-DOS-Zeiten mit Basic. Nur die Werkzeuge für diese sequenzielle Verarbeitung sind weitaus besser. Da werden Datenfelder wie Spagetties mit Separatoren zusammengekettet und nachher wieder getrennt und mit „Zeichenhobeln“ wie shop, shop, shop, oder mit regulären Ausdrücken Anführungszeichen und Dergleichen wieder abgehobelt. Viele Programme, die ich mir angesehen habe, arbeiten mit Feldtrennung wie “Berlin“,“Hamburg“, usw.  Wie es bei jeder Programmiersprache so ist, lernt man erst mit längerer Erfahrung seine Tücken kennen. Aber was würde dagegen sprechen, die Anführungszeichen wegzulassen und statt dem (,) Komma das Tabulatortrennzeichen chr(9) als Separator für die Datenfeldtrennung zu nehmen?

Kann man mit PHP auf eine relationale Datenbank oder ähnlichem Zugreifen? Ich hatte leider noch keine Zeit, mich dort einzulesen, werde dies aber im laufe des Jahres auch noch tun und lernen.

Für Eure Meinung  oder Hinweis schon mal vielen Dank.

  1. moin,

    [..]Aber was würde dagegen sprechen, die Anführungszeichen wegzulassen und statt dem (,) Komma das Tabulatortrennzeichen chr(9) als Separator für die Datenfeldtrennung zu nehmen?

    Wenns denn sein muss, habe ich als Datenfeld-Trennzeichen immer ein Zeichen genommen, was _nicht_ per Tatstatur eingegeben werden kann. Zum Beispiel eine binary-NULL \0

    Kann man mit PHP auf eine relationale Datenbank oder ähnlichem Zugreifen? Ich hatte leider noch keine Zeit, mich dort einzulesen, werde dies aber im laufe des Jahres auch noch tun und lernen.

    Klaro. Nicht nur mit PHP, auch mit PERL!

    --roro

    1. Ich grüsse den Cosmos,

      Zum Beispiel eine binary-NULL \0

      Das dieses Zeichen das Ende eines Strings markiert, weisst du aber?

      Möge das "Self" mit euch sein

      --
      Neulich dachte ich mir, einmal S/M ausprobieren wäre eine tolle Erfahrung. Also hab ich Windows gebootet ...
      ie:{ br:> fl:| va:| ls:& fo:{ rl:( n4:{ de:] ss:) ch:? js:| mo:) sh:( zu:)
      1. Moin,

        Zum Beispiel eine binary-NULL \0

        Das dieses Zeichen das Ende eines Strings markiert, weisst du aber?

        Also, weißt du, wenn ich ein \0 als Feld-Trennzeichen einsetze, dann trennt ein \0 Felder und macht nichts Anderes.

        Mit freundlichen Grüßen, Rolf

        1. Ich grüsse den Cosmos,

          Also, weißt du, wenn ich ein \0 als Feld-Trennzeichen einsetze, dann trennt ein \0 Felder und macht nichts Anderes.

          Tja, das geht solange gut, bis du ein Array aus Strings, die durch \0 getrennt sind, gemeinsam in ein Feld geschrieben werden sollen.

          Kann sein, das ich falsch liege, aber Trennzeichen zu nutzen, die auch Steuerzeichen sind, halte ich für suboptimal.

          Möge das "Self" mit euch sein

          --
          Neulich dachte ich mir, einmal S/M ausprobieren wäre eine tolle Erfahrung. Also hab ich Windows gebootet ...
          ie:{ br:> fl:| va:| ls:& fo:{ rl:( n4:{ de:] ss:) ch:? js:| mo:) sh:( zu:)
          1. Hi,

            Tja, das geht solange gut, bis du ein Array aus Strings, die durch \0 getrennt sind, gemeinsam in ein Feld geschrieben werden sollen.

            dann überlege Dir bitte ganz kurz die Konsequenzen, die irgend ein beliebiges anderes Trennzeichen haben wird.

            Kann sein, das ich falsch liege, aber Trennzeichen zu nutzen, die auch Steuerzeichen sind, halte ich für suboptimal.

            Nö. Trennzeichen zu nehmen, die irgendwo innerhalb der getrennten Felder vorkommen können, ist suboptimal. Es erfordert zwangsläufig eine Kodierung der Felder - die man sich sparen kann, wenn man Trennzeichen benutzt, die _nicht_ vorkommen können (bzw. dürfen). Das erleichtert das Handling. Ferner ist es eine Definitionsfrage: Definiert man \0 als nicht erlaubt, ist \0 ein äußerst geeigneter Trenner.

            Cheatah

            P.S.: Nur für die Akten: Bei CSV werden natürlich zwei Trennzeichen benötigt, wobei es sich für eines (Datensatztrennung) anbietet, zwei verschiedene Zeichen (auch in Kombination) gleichwertig zu behandeln, nämlich \r und \n.

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
  2. Hallo

    Viele Programme, die ich mir angesehen habe, arbeiten mit Feldtrennung wie “Berlin“,“Hamburg“, usw.  Wie es bei jeder Programmiersprache so ist, lernt man erst mit längerer Erfahrung seine Tücken kennen. Aber was würde dagegen sprechen, die Anführungszeichen wegzulassen und statt dem (,) Komma das Tabulatortrennzeichen chr(9) als Separator für die Datenfeldtrennung zu nehmen?

    Nichts, außer der Tabulator kommt, aus welchen Gründen auch immer, als normales (Nichtsteuer)Zeichen innerhalb eines Datenfeldes vor. Damit würde dies beendet werden und unvollständig sein. Daher die Anführungszeichen als zusätzliche Feldbegrenzer.

    Kann man mit PHP auf eine relationale Datenbank oder ähnlichem Zugreifen? Ich hatte leider noch keine Zeit, mich dort einzulesen, werde dies aber im laufe des Jahres auch noch tun und lernen.

    Ja, auf diverse (R)DBMSse auch mit Funktionen, die zum Auslieferungsstandard von PHP gehören. (siehe PHP-Doku)

    Tschö, Auge

    --
    Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
    (Victor Hugo)
    Veranstaltungsdatenbank Vdb 0.1
  3. Hey,

    Aber was würde dagegen sprechen, die Anführungszeichen wegzulassen und statt dem (,) Komma das Tabulatortrennzeichen chr(9) als Separator für die Datenfeldtrennung zu nehmen?

    dass du erneut ad hoc eine Konvention aus der Luft greifst und dir keine Gedanken um Randbedingungen und Sonderfälle machst. Für Details zum Thema lies nach in TAOUP. http://www.catb.org/~esr/writings/taoup/html/ch05s02.html
    Nimm irgendein anderes Format, was formal spezifiziert wurde.

    --
    水-金-地-火-木-土-天-海-冥
    1. dass du erneut ad hoc eine Konvention aus der Luft greifst

      Hey, was soll dieser Provokation? Und was heißt "erneut"?
      Ich habe das erste mal etwas in dieses Forum geschrieben. Ich bin schon einige Jahre in der Programmierung tätig, aber wie du dich mit deiner Antwort präsentierst, ist ziemlich Hobbymäßig!
      Ich weiß schon lange, was char(9) bedeutet, vieleicht länger ald du. Dieses Zeichen hat im HTML keinerlei Funktion und kann somit aus eventuell eingegebenen daten herausgefiltert werden, zumindest in meinem Fall. Also, scheint nichts anderes dagegenzusprechen, wenn mir keiner einen Plausiblen Grund sagen kann.

      1. Hallo,

        dass du erneut ad hoc eine Konvention aus der Luft greifst
        Hey, was soll dieser Provokation? Und was heißt "erneut"?

        Komisch, ich verstand das durchaus nicht als Provokation. Und 'erneut' in diesem Zusammenhang bedeute für mich in etwa 'wie schon so viele andere, die das Rad neu erfinden wollen'.

        Ich habe das erste mal etwas in dieses Forum geschrieben.

        Was durchaus kein Grund für schlechtes Benehmen sein sollte.

        Ich weiß schon lange, was char(9) bedeutet, vieleicht länger ald du. Dieses Zeichen hat im HTML keinerlei Funktion und kann somit aus eventuell eingegebenen daten herausgefiltert werden, zumindest in meinem Fall. Also, scheint nichts anderes dagegenzusprechen, wenn mir keiner einen Plausiblen Grund sagen kann.

        Wie Cheatah weiter unten so trefflich ausgeführt hat, sind Trennzeichen, die ausdrücklich in den Daten verboten sind, gute Trennzeichen.

        BTW: Perl kann an sich ganz gut mit Daten in Textdateien umgehen, weit besser als Basic ode rähnliches, vielleicht auch deshalb, weil es eines der Entwicklungsziele dieser Sprache war, Daten zu analysieren und konvertieren.

        z.B. gibt es unzählige Module (zu finden über http://search.cpan.org, die das komfortabel für dieverse standardisierte Formate erledigen. Datunter sind auch Module für den Umgang mit CSV-Dateien oder ähnlichem zu finden.

        In Kenntnis dieser Vielfalt an zur Verfügung stehenden Bibliotheken drängt sich auch mir die Frage auf: Wozu ein neues Datei-Format definieren?

        Grüße
          Klaus

      2. Das war keine Provokation, sondern eine sachliche Feststellung. Du hast eine Frage gestellt, ich hab spezifisch darauf geantwortet, wie du im letzten Satz darum gebeten hast.

        Hast du meine Antwort verstanden? Hast du das verlinkte Kapitel aus dem Buch zum Thema, wie man exzellente Datenformate entwirft, gelesen? Da steht nämlich dein plausibler Grund, weshalb du nicht Tab nehmen solltest.

        Das Wort "erneut" bezog sich auf CSV, dann TSV. Beides sind nicht ausreichend spezifiziert. Man handelt sich mit Konventionen wie solchen nur Ärger bei der Interoperabilität ein, wie jahrzehntelange Erfahrungswerte zeigen.

        --
        水-金-地-火-木-土-天-海-冥
  4. Aber was würde dagegen sprechen, die Anführungszeichen wegzulassen und statt dem (,) Komma das Tabulatortrennzeichen chr(9) als Separator für die Datenfeldtrennung zu nehmen?

    Das Komma dient traditionell der Datenfeldtrennung, vgl. auch "CSV". Bei uns in Deutschland kommt man oft mit dem Semikolon, da bei uns das Komma der Dezimaltrenner ist.

    Perl als "glue-Sprache" folgt ein wenig dem KISS-Prinzip, in der von uns favorisierten Übersetzung: "Keep it simple, stupid."
    http://de.wikipedia.org/wiki/KISS-Prinzip

    Dem Prinzip folgend sollte man Daten als Textdateien speichern, gerade auch im CSV-Format.