Cách tốt nhất để xử lý khoảng trắng khi cho phép người dùng chỉnh sửa cấu hình, cặp name = value là gì?


8

Chẳng hạn, bạn cho phép người dùng xác định biến đường dẫn khét tiếng. Làm thế nào để bạn giải thích apppath = C:\Program Files\App?

Điều này trông giống như một ngôn ngữ lập trình được áp dụng thực tiễn để bỏ qua các khoảng trắng và bạn để chúng xung quanh dấu bằng cho dễ đọc, nhưng nó có thể là một giá trị biến hợp lệ với khoảng trắng trong ứng dụng (xem xét, đó là một hậu tố).

Ngay cả các phím có thể chứa khoảng trắng, phải không?

Thực hành tốt nhất chung cho ứng dụng của tôi là gì? Nếu tôi có:

key-example = value-example

Tôi nên giải thích khóa là "key-example"hay "key-example "và giá trị là "value-example"hay " value-example"?


Tôi đã đọc câu hỏi của bạn hai lần và vẫn không hiểu nó. Bạn có thể viết lại nó một chút hoặc hiển thị một số mã cùng với những gì bạn đang cố gắng để đạt được?
Jay Zelenkov

Ngôn ngữ lập trình nào bạn đang sử dụng để phân tích tệp?
Tulains Córdova

2
@ user61852: tại sao điều đó lại quan trọng? Các yêu cầu đối với tệp cấu hình phải hoàn toàn độc lập với ngôn ngữ lập trình. Hãy nghĩ về năm chương trình khác nhau được viết bằng năm ngôn ngữ khác nhau, tất cả đều chia sẻ cùng một tệp cấu hình.
Doc Brown

1
@ user61852 Không thành vấn đề. Tôi đã cố gắng sử dụng :thay =vì bởi vì tôi chỉ sử dụng điều này trong javascript (mặc dù câu hỏi của tôi không giới hạn trong ứng dụng của tôi, do đó không liên quan đến việc hỏi về ngôn ngữ của nó) nhưng điều này không giúp tôi đọc cấu hình dưới dạng đối tượng JSON . JSON yêu cầu tất cả các giá trị được trích dẫn, đó là gánh nặng không cần thiết cho người dùng.
Val

@valtih Tôi hỏi vì một số ngôn ngữ đã có API cho tệp cấu hình. Ví dụ, Java có một lớp Properties xử lý các loại tệp khóa / giá trị đó.
Tulains Córdova

Câu trả lời:


14

người dùng , tôi không mong đợi khoảng trắng ở hai bên của dấu bằng sẽ thay đổi giá trị của khóa hoặc giá trị. Xem câu hỏi liên quan này trên unix.SE cũng như tình huống có thể khó hiểu như thế nào.

Đừng làm khó người dùng của bạn hơn, hãy cắt khoảng trắng từ cả khóa và giá trị. Nếu khoảng trắng hàng đầu có trường hợp sử dụng thực sự cho một trong hai, thì hãy để người dùng bọc khóa hoặc giá trị trong dấu ngoặc kép.


2
Đây là câu trả lời duy nhất thực sự trả lời câu hỏi.
Các cuộc đua nhẹ nhàng trong quỹ đạo

11

Tùy thuộc vào bạn để xác định các quy tắc cho ứng dụng của bạn.

Chẳng hạn, bạn có thể định nghĩa rằng:

  • Khoảng trắng trước hoặc sau dấu bằng được bỏ qua,

  • Khoảng trắng bên trong khóa bị cấm,

  • Khoảng trắng bên trong giá trị chỉ có thể được sử dụng nếu giá trị được đặt trong dấu ngoặc kép, vì vậy:

    say-hello = Hello, World!
    

    bị cấm, trong khi:

    say-hello = "Hello, World!"
    

    được cho phép, điều này cũng cho phép có các tiền tố khoảng trắng:

    say-hello = "    Indentation is sweet."
    

Xác định một định dạng có thể là một nhiệm vụ phức tạp. Ví dụ:

  • Làm thế nào để bạn thoát dấu ngoặc kép?

  • Làm thế nào để bạn thoát khỏi nhân vật thoát bạn sử dụng để thoát dấu ngoặc kép?

  • Làm thế nào để bạn xử lý các giá trị trống?

  • Độ dài tối đa của một phím là gì? Giá trị thì sao?

  • Làm thế nào để bạn xử lý các giá trị đa dòng?

  • Còn các ký tự Unicode khoảng trắng ngoài khoảng trắng (chẳng hạn như ký tự khoảng trắng không phá vỡ) thì sao?

  • Còn các ký tự Unicode thường không được hiển thị trên màn hình thì sao? Chẳng hạn, làm thế nào để bạn đối phó với các loại Cf hoặc Zl Unicode?

  • Các ký tự được phép trong khóa là gì? Ví dụ: là:

    '
    

    một khóa hợp lệ?

  • Dòng sau có nên hoạt động không? ¹

    say-hello ꘌ "Hello, World!"
    

    Gợi ý: dấu bằng không phải là dấu bằng, mà là ký tự 0xa60c (bộ kéo dài âm tiết Vai). Mặc dù ít người sẽ sử dụng biểu tượng này thay vì bình đẳng, nhưng trường hợp thường xuyên hơn là sao chép-dán từ Microsoft Word (xem kỹ các dấu ngoặc kép):

    say-hello = “Hello, World!”
    
  • Vân vân.

Đây là lý do tại sao, trừ khi bạn hoàn toàn chắc chắn rằng bạn có thể xác định định dạng và mô tả chính xác và dài dòng, hãy sử dụng định dạng đã tồn tại .

JSON hoặc XML là các định dạng thường được sử dụng mà bạn có thể sử dụng trong gần như mọi ngôn ngữ lập trình. Bạn thậm chí có thể trừu tượng hóa định dạng cơ bản bằng cách sử dụng cơ sở dữ liệu. Redis , ví dụ, là một giải pháp phổ biến cho cửa hàng khóa-giá trị.


Người dùng Chrome sử dụng Windows có thể sẽ thấy một dấu hỏi trong hình vuông. Với các trình duyệt khác hoặc với Chrome trên Linux, ký tự xuất hiện như một dấu bằng và có thể dễ dàng gây hiểu lầm: sự khác biệt duy nhất về mặt hình ảnh là có một sự khác biệt nhỏ trong khoảng cách giữa các thanh ngang.


Vâng, tôi sẽ chỉ định nó cho người dùng. Tôi đã có một dòng đơn giản cho mỗi định dạng cặp khóa / giá trị được phân tách bằng nhau. Đó là, mỗi dòng được phân chia =và dấu ngoặc kép không phải là vấn đề trong khi nó không rõ ràng với khoảng trắng bởi vì tôi thích có chúng và điều này tạo ra sự mơ hồ. Nói rằng khoảng trắng hàng đầu / kết thúc được cắt tỉa là đủ. Cảm ơn.
Val

@valtih: Đặc biệt cắt xén khoảng trắng là tốt, IMO. Hầu hết người dùng sẽ không nhận ra rằng nó sẽ ở đó vì về cơ bản là vô hình.
Bart van Ingen Schenau

@mainma Dấu hiệu quá khổ đó biểu hiện hoàn hảo trên hộp win7 của tôi trong tất cả mọi thứ tôi đã thử đó là nhận biết unicode.
Dan đang loay hoay bởi Firelight

@DanNeely: thật lạ. Trên Windows 8.1, Chrome hiển thị dấu chấm hỏi trong hình vuông.
Arseni Mourzenko

1
@MainMa Chrome luôn có vấn đề với dự phòng Unicode trên Windows. Đó là một vấn đề được biết đến khá nhiều cho toàn bộ sự tồn tại của nó (~ 5 năm?); Đây là (một trong?) lỗi cho nó, và nó cũng có thể là wontfix vào thời điểm này. Nó hoạt động tốt trong Firefox và IE.
Bob
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.