Qual é a melhor prática para lidar com espaços em branco ao permitir que o usuário edite a configuração, os pares nome = valor?

8

Por exemplo, você permite que o usuário defina a variável do caminho notório. Como você interpreta apppath = C:\Program Files\App?

Parece uma prática adotada pela linguagem de programação para ignorar os espaços em branco e você os deixa em torno da marca de igualdade para facilitar a leitura, mas pode ser um valor de variável válido com espaço em branco no aplicativo (considere, é um sufixo).

Até as chaves podem conter espaços em branco, não podem?

Qual é a melhor prática geral para meu aplicativo? Se eu tiver:

key-example = value-example

devo interpretar a chave sendo "key-example"ou "key-example "e o valor como sendo "value-example"ou " value-example"?

Val
fonte
Eu li sua pergunta duas vezes e ainda não a entendo. Você poderia reformular um pouco ou mostrar algum código junto com o que você está tentando alcançar?
Jay Zelenkov
Qual linguagem de programação você está usando para analisar o arquivo?
Tulains Córdova
2
@ user61852: por que isso importa? Os requisitos para o arquivo de configuração devem ser totalmente independentes da linguagem de programação. Pense em cinco programas diferentes escritos em cinco idiomas diferentes, todos compartilhando o mesmo arquivo de configuração.
Doc Brown
1
@ user61852 Não importa. Eu tentei usar :no lugar =porque eu uso isso exclusivamente em javascript (embora minha pergunta não se limite ao meu aplicativo, portanto, é irrelevante perguntar sobre o idioma), mas isso não me ajudou a ler a configuração como objeto JSON . JSON requer todos os valores citados, o que é uma carga desnecessária para o usuário.
Val
@valtih perguntei porque alguns idiomas já possuem uma API para arquivos de configuração. Por exemplo, Java tem uma classe Properties que lida com esse tipo de arquivo de chave / valor.
Tulains Córdova

Respostas:

14

Como usuário , não espero que o espaço em branco nos dois lados do sinal de igual altere o valor da chave ou do valor. Veja também esta questão relacionada no unix.SE , como a situação pode ser confusa.

Não dificulte os usuários, apare os espaços em branco da chave e do valor. Se os espaços em branco à esquerda tiverem um caso de uso real para ambos, deixe o usuário agrupar a chave ou o valor entre aspas.

dotancohen
fonte
2
Esta é a única resposta que realmente responde à pergunta.
Lightness Races em órbita no dia
11

Cabe a você definir as regras para seu aplicativo.

Por exemplo, você pode definir que:

  • Espaço em branco antes ou depois do sinal de igualdade ser ignorado,

  • O espaço em branco dentro da chave é proibido,

  • O espaço em branco dentro do valor pode ser usado apenas se o valor estiver entre aspas, portanto:

    say-hello = Hello, World!
    

    é proibido, enquanto:

    say-hello = "Hello, World!"
    

    é permitido, o que também possibilita ter prefixos de espaço em branco:

    say-hello = "    Indentation is sweet."
    

Definir um formato pode ser uma tarefa complexa. Por exemplo:

  • Como você escapa citações?

  • Como você escapa do caractere de escape usado para escapar de aspas?

  • Como você lida com valores vazios?

  • Qual é o comprimento máximo de uma chave? Que tal um valor?

  • Como você lida com valores de múltiplas linhas?

  • E os caracteres Unicode de espaço em branco que não sejam um espaço (como um caractere de espaço sem quebra)?

  • E os caracteres Unicode que geralmente não são exibidos na tela ? Por exemplo, como você lida com as categorias Unicode Cf ou Zl?

  • Quais são os caracteres permitidos na chave? Por exemplo, é:

    '
    

    uma chave válida?

  • A linha a seguir deve funcionar? ¹

    say-hello ꘌ "Hello, World!"
    

    Dica: o sinal de igualdade não é um sinal de igualdade, mas o caractere 0xa60c (prolongador de sílaba Vai). Embora poucas pessoas usem esse símbolo em vez da igualdade, o caso mais frequente é um copiar e colar do Microsoft Word (observe atentamente as aspas):

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

É por isso que, a menos que você tenha certeza absoluta de que pode definir um formato e descrevê-lo de maneira precisa e detalhada, use um formato que já exista .

JSON ou XML são formatos comumente usados ​​que você pode usar em quase todas as linguagens de programação. Você pode até abstrair o formato subjacente usando um banco de dados. Redis , por exemplo, é uma solução popular para armazenamento de valores-chave.


Users Os usuários do Chrome que usam o Windows provavelmente verão um ponto de interrogação em um quadrado. Em outros navegadores ou no Chrome no Linux, o caractere aparece como um sinal de igualdade e pode ser facilmente enganador: a única diferença visual é que há uma pequena diferença no espaço entre as barras horizontais.

Arseni Mourzenko
fonte
Bem, vou especificá-lo para o usuário. Eu tinha uma linha simples por formato de par de chave / valor separado por igualdade em mente. Ou seja, todas as linhas são divididas =e as aspas não são o problema, embora não esteja claro os espaços em branco, porque eu prefiro tê-los e isso cria ambiguidade. Dizer que os espaços em branco iniciais / finais são aparados é suficiente. Obrigado.
Val
@valtih: Especialmente, cortar o espaço em branco à direita é bom, IMO. A maioria dos usuários não perceberia que estaria lá, pois é essencialmente invisível.
Bart van Ingen Schenau
@mainma Esse sinal de igual de tamanho grande é renderizado perfeitamente na minha caixa win7 em tudo o que eu tentei que reconhece o unicode.
Dan Is Fiddling Por Firelight
@ DanNeely: isso é estranho. No Windows 8.1, o Chrome mostra um ponto de interrogação em um quadrado.
Arseni Mourzenko
1
O @MainMa Chrome sempre teve problemas com o fallback Unicode no Windows. Esse tem sido um problema conhecido praticamente por toda a sua existência (~ 5 anos?); aqui está (um dos?) o bug para ele, e pode muito bem ser corrigido neste momento. Funciona bem no Firefox e IE.
Bob