รูปแบบไฟล์กำหนดค่าที่มนุษย์อ่านง่ายที่สุดคืออะไร [ปิด]


13

ไฟล์การกำหนดค่าปัจจุบันเป็นดังนี้:

mainwindow.title = 'test'
mainwindow.position.x = 100
mainwindow.position.y = 200

mainwindow.button.label = 'apply'
mainwindow.button.size.x = 100
mainwindow.button.size.y = 30

logger.datarate = 100
logger.enable = True
logger.filename = './test.log'

นี่คือการอ่านด้วยหลามในพจนานุกรมที่ซ้อนกัน:

{
  'mainwindow':{
    'button':{
      'label': {'value':'apply'},
       ...
  },
  'logger':{
     datarate: {'value': 100},
     enable: {'value': True},
     filename: {'value': './test.log'}
  }, 
  ...    
}

มีวิธีที่ดีกว่าในการทำเช่นนี้? แนวคิดคือการรับประเภทของพฤติกรรม XML และหลีกเลี่ยง XML ให้นานที่สุด ผู้ใช้จะถือว่าคอมพิวเตอร์ไม่รู้หนังสือเกือบทั้งหมดและโดยทั่วไปใช้ notepad และ copy-paste ดังนั้นประเภท "ส่วนหัว + ตัวแปร" ของไพ ธ อนจึงถือว่ายากเกินไป

ผู้ใช้จำลองแก้ไขไฟล์ปรับแต่งโปรแกรมเมอร์ที่มีความสามารถจัดการพจนานุกรม พจนานุกรมที่ซ้อนกันถูกเลือกเพื่อให้แยกง่าย (ตัวบันทึกไม่จำเป็นหรือแม้กระทั่งไม่สามารถ / แก้ไขพารามิเตอร์ mainwindow)


11
ที่ง่ายที่สุดคือการสร้างแอปขนาดเล็กให้กับลูกค้าของคุณซึ่งไม่ได้ทำอะไรนอกจากแก้ไขไฟล์ปรับแต่งเหล่านี้
Patrick Hughes

11
ไฟล์กำหนดค่าที่ง่ายที่สุดสำหรับมนุษย์คือ: Do what I want.มันเป็นสิ่งที่ยากที่สุดสำหรับคอมพิวเตอร์ แต่: P
Sjoerd

@PatrickHughes ฉันเดาว่ามีอยู่แล้ว คุณรู้จักโปรแกรมดังกล่าวหรือไม่ ฉันไม่ต้องการที่จะใช้เวลากับสิ่งที่เรียบง่าย "พิมพ์สวย" ปัญหาคือการเพิ่มตัวแบ่งโปรแกรมขนาดเล็กต้องใช้มากขึ้น ฉันหมายถึงคอมพิวเตอร์ทุกเครื่องมีกลุ่ม, textedit หรือ notepad
Juha

@sjoerd นี่คือสิ่งที่ฉันอยากรู้ มีอัลกอริทึมที่ใช้ภาษามนุษย์มากกว่าโปรแกรมในแง่นี้หรือไม่
Juha

2
ผู้ใช้สามารถทำลายอะไรก็ได้ หากพวกเขากำลังจะแก้ไขด้วยตนเองโปรดเตรียมการสนับสนุนmainwindow.title =='test"
MSalters

คำตอบ:


15

คุณสามารถใช้สิ่งที่ต้องการYAML นี่คือลิงค์ไปยังตัวอย่าง:

http://www.yaml.org/start.html

--- !clarkevans.com/^invoice
invoice: 34843
date   : 2001-01-23
bill-to: &id001
    given  : Chris
    family : Dumars
    address:
        lines: |
            458 Walkman Dr.
            Suite #292
        city    : Royal Oak
        state   : MI
        postal  : 48046
ship-to: *id001
product:
    - sku         : BL394D
      quantity    : 4
      description : Basketball
      price       : 450.00
    - sku         : BL4438H
      quantity    : 1
      description : Super Hoop
      price       : 2392.00
tax  : 251.42
total: 4443.52
comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.

คุณสามารถค้นหาผูกหลามได้ที่PyYAML มันใช้งานง่ายกว่า JSON เล็กน้อย (ซึ่งเป็นตัวอย่างที่สองของคุณ)


10
YAML สวยหรู แต่ไม่ง่ายที่สุดแน่นอน
9000

1
ฉันคิดว่าง่ายที่สุดในบริบทของคำถามของเขา: "รับพฤติกรรมประเภท XML และหลีกเลี่ยง XML ให้นานที่สุด" ฉันไม่แน่ใจในสิ่งที่ง่ายขึ้นในขณะที่ปฏิบัติตามข้อกำหนดนี้
jmq

อืมฉันควรใช้ codeblock YAML ตัวแรกถ้าฉันเปลี่ยน "" และ "=" ถึง ":" และสูญเสีย aphostropes หรือไม่ มีข้อมูลซ้ำซ้อนเล็กน้อย แต่จากนั้นมันก็ขึ้นอยู่กับผู้ใช้ซึ่งสัญกรณ์ที่เขาชอบที่สุด
Juha

3
ฉันผู้ใช้ที่ไม่เป็นธรรมทางเทคนิคบางอย่างจะได้รับผิดเยื้อง - นับประสาสิ่งที่คลุมเครือมากขึ้นเช่น>หลังจากที่comments:และ&และ*ในด้านหน้าของid001
Izkata

6

สิ่งที่ดีที่สุดที่คุณสามารถทำได้คือมอบโซลูชันจำลองของคุณและอาจจำลองโซลูชันอื่นอีกสองสามรายการและขอให้ผู้ใช้ตัวแทนสองหรือสามคนของระบบของคุณ พวกเขาจะดีกว่ามากที่จะบอกคุณว่าพวกเขาชอบอะไรมากกว่าคนที่เลือกเองที่ตอบคำถามในเว็บไซต์นี้

ที่ถูกกล่าวว่าสำหรับผู้ใช้ "โดยทั่วไปคอมพิวเตอร์ไม่รู้หนังสือ" ฉันคิดว่ารูปแบบที่คุณแสดงในคำถามของคุณน่าจะเป็นรูปแบบข้อความธรรมดาที่ดีที่สุด หากพวกเขาไม่รู้หนังสือคอมพิวเตอร์จริง ๆ คุณอาจต้องการพิจารณา GUI อย่างง่ายเพื่อให้พวกเขาไม่ต้องแก้ไขไฟล์กำหนดค่าด้วยตนเอง


3

สูญเสียทุกสิ่งที่คุณสูญเสีย name.name.name=valueแต่ละอันแยกกันเป็นเรื่องง่ายที่สุดเท่าที่จะทำได้ คุณไม่จำเป็นต้องใส่เครื่องหมายอัญประกาศคุณรู้ว่าเมื่อtrueใดที่บูลีนและเมื่อtrueเป็นสตริงอย่าทำให้ "คนโง่" บอกคุณว่า สำหรับสตริงถ้าฟิลด์ไม่ควรมีช่องว่างนำหน้า / ต่อท้าย


3

ลองนึกภาพคนจีนที่ไม่รู้ภาษาอังกฤษว่ากำลังพยายามอ่านไฟล์กำหนดค่าของคุณ ลองจินตนาการว่าไฟล์การกำหนดค่าเป็นภาษาอาหรับ (และคุณไม่รู้จักภาษาอาหรับ) ตอนนี้ถามตัวเองว่ามนุษย์คนนี้สามารถอ่านได้จริงหรือ

แม้ว่าผู้อ่านจะรู้ภาษาอังกฤษพวกเขาก็ยังไม่รู้ว่า "logger.datarate = 100" หมายถึง 100 ตัวอักษรต่อวินาทีหรือ 100 GiB ต่อชั่วโมงหรือไก่ 100 ตัวต่อเมตริกตัน

รูปแบบไฟล์ที่มนุษย์อ่านได้มากที่สุดคือไฟล์ไบนารี่ที่มีกล่องโต้ตอบ / ตัวช่วยสร้าง / ตัวกำหนดค่า GUI ที่เหมาะสม (พร้อมกับการทำให้เป็นสากลระบบช่วยเหลือ ฯลฯ )


2

ฉันอยู่กับ Patrick Hughes สร้างแอปง่าย ๆ สำหรับแก้ไขการกำหนดค่า ไฟล์กำหนดค่าเองอาจมีความซับซ้อนมากกว่านี้เล็กน้อยและอาจมีแอททริบิวสำหรับตัวแก้ไขที่จะใช้ (ชื่อที่แสดง, ข้อความช่วยเหลือ, ประเภทค่า, ค่าต่ำสุด / สูงสุด ฯลฯ )


1
ปัญหาคือแอพนี้ต้องรองรับ osx, win และ ubuntu และสามารถเข้าถึงระบบไฟล์ได้ ดังนั้นทางเลือกเดียวของฉันคือ python แบบสแตติกที่รันได้ (และ wx สำหรับรูปลักษณ์เนทิฟ) หรือมีภาษาอื่นหรือไม่? คุณสามารถสร้างโปรแกรมจาวาสแตติกได้หรือไม่?
Juha

แอป QT จะเป็นวิธีการแก้ปัญหาที่ง่ายและสอดคล้องกันในกรณีของคุณ
ริกา

2

ฉันว่าสิ่งที่คุณมี (ไฟล์คุณสมบัติ) เป็นรูปแบบการกำหนดค่าที่มนุษย์อ่านได้ดีที่สุดแล้ว :)

นี่คือข้อโต้แย้งของฉัน:

  • ไฟล์คุณสมบัติเป็นเพียงคู่ที่สำคัญ / ค่า มนุษย์อ่านได้ง่าย
  • ไวยากรณ์ของคำศัพท์สั้น ๆ ไม่เหมือน xml
  • ทำรังได้อย่างง่ายดายด้วย '.' เช่นในตัวอย่างของคุณ
  • โครงสร้างแบบแบนช่วยให้การกระจายในสภาพแวดล้อมที่ควบคุมง่าย

จุดสุดท้ายนั้นสำคัญมากทีเดียว เนื่องจากทุกวันนี้โปรเจ็กต์ทั้งหมดถูกแบ่งออกเป็นแบรนช์ไฟล์คอนฟิกูเรชันอาจทำให้เกิดอาการปวดจำนวนมากเมื่อคุณรวมสาขา รูปแบบไฟล์แบบคงที่เช่นไฟล์คุณสมบัติง่ายกว่าที่จะผสานกว่าไฟล์โครงสร้างต้นไม้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.