Was ist die beste Vorgehensweise beim Umgang mit Leerzeichen, wenn der Benutzer die Konfiguration bearbeiten darf, die Namen = Wert-Paare?

8

Sie lassen den Benutzer beispielsweise die berüchtigte Pfadvariable definieren. Wie interpretierst du?apppath = C:\Program Files\App ?

Dies sieht aus wie eine Programmiersprache, die angewendet wird, um die Leerzeichen zu ignorieren, und Sie lassen sie zur besseren Lesbarkeit um das Gleichheitszeichen herum, es kann sich jedoch um einen gültigen Variablenwert mit Leerzeichen in der Anwendung handeln (beachten Sie, dass es sich um ein Suffix handelt).

Sogar Schlüssel können Leerzeichen enthalten, nicht wahr?

Was ist die allgemeine Best Practice für meine Bewerbung? Wenn ich habe:

key-example = value-example

soll ich das Schlüsselwesen "key-example"oder "key-example "und den Wert als Sein "value-example"oder interpretieren " value-example"?

Val
quelle
Ich habe Ihre Frage zweimal gelesen und verstehe sie immer noch nicht. Könnten Sie es ein wenig umformulieren oder Code zusammen mit dem zeigen, was Sie erreichen möchten?
Jay Zelenkov
Welche Programmiersprache verwenden Sie zum Parsen der Datei?
Tulains Córdova
2
@ user61852: warum sollte das wichtig sein? Die Anforderungen für die Konfigurationsdatei sollten völlig unabhängig von der Programmiersprache sein. Stellen Sie sich fünf verschiedene Programme vor, die in fünf verschiedenen Sprachen geschrieben sind und alle dieselbe Konfigurationsdatei verwenden.
Doc Brown
1
@ user61852 Es spielt keine Rolle. Ich habe versucht, :anstelle von zu verwenden, =weil ich dies ausschließlich in Javascript verwende (obwohl meine Frage nicht auf meine App beschränkt ist, ist es daher irrelevant, überhaupt nach ihrer Sprache zu fragen), aber dies hat mir nicht geholfen, die Konfiguration als JSON-Objekt zu lesen . JSON erfordert alle angegebenen Werte, was für den Benutzer eine unnötige Belastung darstellt.
Val
@valtih Ich habe gefragt, weil einige Sprachen bereits eine API für Konfigurationsdateien haben. Beispielsweise verfügt Java über eine Properties-Klasse, die diese Art von Schlüssel- / Wertedateien verarbeitet.
Tulains Córdova

Antworten:

14

Als Benutzer erwarte ich nicht, dass das Leerzeichen auf beiden Seiten des Gleichheitszeichens den Wert des Schlüssels oder den Wert ändert. Sehen Sie sich auch diese verwandte Frage unter unix.SE an, wie verwirrend die Situation sein kann.

Machen Sie es Ihren Benutzern nicht schwerer, schneiden Sie Leerzeichen sowohl vom Schlüssel als auch vom Wert ab. Wenn für führende Leerzeichen ein realer Anwendungsfall vorliegt, lassen Sie den Benutzer den Schlüssel oder Wert in Anführungszeichen setzen.

dotancohen
quelle
2
Dies ist die einzige Antwort, die die Frage tatsächlich beantwortet.
Leichtigkeitsrennen im Orbit
11

Es liegt an Ihnen, die Regeln für Ihre App zu definieren.

Zum Beispiel können Sie Folgendes definieren:

  • Leerzeichen vor oder nach dem Gleichheitszeichen werden ignoriert.

  • Leerzeichen im Schlüssel sind verboten,

  • Leerzeichen innerhalb des Werts können nur verwendet werden, wenn der Wert in Anführungszeichen gesetzt ist.

    say-hello = Hello, World!
    

    ist verboten, während:

    say-hello = "Hello, World!"
    

    ist zulässig, wodurch auch Leerzeichenpräfixe möglich sind:

    say-hello = "    Indentation is sweet."
    

Das Definieren eines Formats kann eine komplexe Aufgabe sein. Zum Beispiel:

  • Wie entkommen Sie Zitaten?

  • Wie entkommen Sie dem Escape-Zeichen, mit dem Sie Anführungszeichen umgehen?

  • Wie gehen Sie mit leeren Werten um?

  • Was ist die maximale Länge eines Schlüssels? Was ist mit einem Wert?

  • Wie gehen Sie mit mehrzeiligen Werten um?

  • Was ist mit anderen Whicpace-Unicode-Zeichen als einem Leerzeichen (z. B. einem nicht unterbrechenden Leerzeichen)?

  • Was ist mit Unicode- Zeichen, die normalerweise nicht auf dem Bildschirm angezeigt werden ? Wie gehen Sie beispielsweise mit den Unicode-Kategorien Cf oder Zl um?

  • Welche Zeichen sind im Schlüssel zulässig? Zum Beispiel ist:

    '
    

    ein gültiger Schlüssel?

  • Sollte die folgende Zeile funktionieren? ¹

    say-hello ꘌ "Hello, World!"
    

    Hinweis: Das Gleichheitszeichen ist kein Gleichheitszeichen, sondern das Zeichen 0xa60c (Vai-Silbenverlängerer). Obwohl nur wenige Personen dieses Symbol anstelle der Gleichheit verwenden würden, ist der häufigste Fall das Kopieren und Einfügen aus Microsoft Word (beachten Sie die Anführungszeichen genau):

    say-hello = “Hello, World!”
    
  • usw.

Aus diesem Grund, wenn Sie ganz sicher sind , dass Sie können ein Format definieren und beschreiben sie genau und verbosely, verwenden ein Format , das bereits vorhanden ist .

JSON oder XML sind häufig verwendete Formate, die Sie in nahezu jeder Programmiersprache verwenden können. Sie können das zugrunde liegende Format sogar mithilfe einer Datenbank abstrahieren. Redis ist beispielsweise eine beliebte Lösung für das Speichern von Schlüsselwerten.


¹ Chrome-Benutzer, die Windows verwenden, sehen wahrscheinlich ein Fragezeichen in einem Quadrat. Bei anderen Browsern oder bei Chrome unter Linux erscheint das Zeichen wie ein Gleichheitszeichen und kann leicht irreführend sein: Der einzige visuelle Unterschied besteht darin, dass der Abstand zwischen den horizontalen Balken geringfügig ist.

Arseni Mourzenko
quelle
Nun, ich werde es dem Benutzer spezifizieren. Ich hatte eine einfache Zeile pro gleichheitsgetrenntem Schlüssel / Wert-Paar-Format im Sinn. Das heißt, jede Zeile wird durch geteilt =und Anführungszeichen sind nicht das Problem, während es bei Leerzeichen unklar ist, weil ich sie lieber habe und dies zu Mehrdeutigkeiten führt. Es reicht aus zu sagen, dass führende / endende Leerzeichen gekürzt werden. Vielen Dank.
Val
@valtih: Besonders das Trimmen von Leerzeichen ist gut, IMO. Die meisten Benutzer würden nicht erkennen, dass es dort sein würde, da es im Wesentlichen unsichtbar ist.
Bart van Ingen Schenau
@mainma Dieses übergroße Gleichheitszeichen wird auf meiner win7-Box in allem, was ich versucht habe und das Unicode-fähig ist, perfekt wiedergegeben.
Dan spielt
@ DanNeely: Das ist komisch. Unter Windows 8.1 zeigt Chrome ein Fragezeichen in einem Quadrat an.
Arseni Mourzenko
1
@MainMa Chrome hatte schon immer Probleme mit dem Unicode-Fallback unter Windows. Das ist ein bekanntes Problem für seine gesamte Existenz (~ 5 Jahre?); Hier ist (einer von?) der Fehler dafür, und es könnte an dieser Stelle genauso gut nicht behoben werden. Es funktioniert gut in Firefox und IE.
Bob