แปลงค่าที่คั่นด้วยแท็บเป็นตาราง ASCII


8

วิธีที่มีประสิทธิภาพที่สุดในการแปลงข้อมูลที่คั่นด้วยแท็บเช่นนี้คืออะไร:

a   b   c   d   cat
NULL    NULL    NULL    NULL    NULL
NULL    NULL    NULL    d   d
NULL    NULL    c   NULL    c
NULL    NULL    c   d   c; d
NULL    b   NULL    NULL    b
NULL    b   NULL    d   b; d
NULL    b   c   NULL    b; c
NULL    b   c   d   b; c; d
a   NULL    NULL    NULL    a
a   NULL    NULL    d   a; d
a   NULL    c   NULL    a; c
a   NULL    c   d   a; c; d
a   b   NULL    NULL    a; b
a   b   NULL    d   a; b; d
a   b   c   NULL    a; b; c
a   b   c   d   a; b; c; d

บางสิ่งบางอย่างใกล้เคียงกับสิ่งนี้:

a    | b    | c    | d    | cat
-----+------+------+------+-----------
NULL | NULL | NULL | NULL | NULL
NULL | NULL | NULL | d    | d
NULL | NULL | c    | NULL | c
NULL | NULL | c    | d    | c; d
NULL | b    | NULL | NULL | b
NULL | b    | NULL | d    | b; d
NULL | b    | c    | NULL | b; c
NULL | b    | c    | d    | b; c; d
a    | NULL | NULL | NULL | a
a    | NULL | NULL | d    | a; d
a    | NULL | c    | NULL | a; c
a    | NULL | c    | d    | a; c; d
a    | b    | NULL | NULL | a; b
a    | b    | NULL | d    | a; b; d
a    | b    | c    | NULL | a; b; c
a    | b    | c    | d    | a; b; c; d

ขณะนี้ฉันใช้ Notepad ++ ดังนี้:

  1. แปลงแท็บเป็นช่องว่าง
  2. จัดแนวข้อมูลด้วยตนเอง
  3. ใช้โหมดคอลัมน์เพื่อแทรกไปป์

ขั้นตอนที่สองเป็นขั้นตอนที่น่าเบื่อที่สุดและฉันอยากจะมีส่วนนี้โดยอัตโนมัติ

หมายเหตุ: ฉันใช้เบราว์เซอร์เมื่อทำงานและบางครั้งฉันเปิดโปรแกรมแก้ไขข้อความไว้ข้างๆ ทางออกที่มีประสิทธิภาพเป็นวิธีหนึ่งที่ต้องใช้ความพยายามน้อยที่สุด ฉันสามารถใช้:

  • Notepad ++
  • โปรแกรมแก้ไขข้อความทั่วไปพร้อมรองรับการค้นหา / แทนที่ regexp
  • พิมพ์ JavaScript ภายในคอนโซลเบราว์เซอร์
  • บริการเว็บออนไลน์
  • PHP ในบรรทัดคำสั่ง ( php -a)

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

@JeffZeitlin ฉันจะอัปเดตคำถาม
Salman

มันเป็นawkสคริปต์ง่ายๆ
Barmar

@Barmar ฉันไม่ได้ใช้ awk แต่ฉันมั่นใจว่าคนอื่นจะเห็นว่ามีประโยชน์
Salman A

ถามคำถามเกี่ยวกับPCG - lulz จะตามมา เดี๋ยวก่อนมันถูกถามแล้ว ... codegolf.stackexchange.com/questions/100613/ … (โปรดทราบว่า TSV-> CSV เป็นเพียงความแตกต่างเพียงอย่างเดียว ... {{(⊃⍵)⍪⍉⍪↑¨↓⍉↑1↓⍵}s¨'⎕T'⎕T¨(s←1↓¨⊢⊂⍨⊢=⊃)¯1⌽⍵}ดูเหมือนจะดีพอที่จะทำงานใช่มั้ย)

คำตอบ:


9

ฉันจะแปลงค่าที่คั่นด้วยแท็บเป็นตาราง ASCII ได้อย่างไร

ฉันใช้Text Tables Generatorสำหรับงานประเภทนี้

ฉันวางข้อมูลของคุณในหน้านั้นและสร้างตารางต่อไปนี้:

+------+------+------+------+------------+
| a    | b    | c    | d    | cat        |
+------+------+------+------+------------+
| NULL | NULL | NULL | NULL | NULL       |
+------+------+------+------+------------+
| NULL | NULL | NULL | d    | d          |
+------+------+------+------+------------+
| NULL | NULL | c    | NULL | c          |
+------+------+------+------+------------+
| NULL | NULL | c    | d    | c; d       |
+------+------+------+------+------------+
| NULL | b    | NULL | NULL | b          |
+------+------+------+------+------------+
| NULL | b    | NULL | d    | b; d       |
+------+------+------+------+------------+
| NULL | b    | c    | NULL | b; c       |
+------+------+------+------+------------+
| NULL | b    | c    | d    | b; c; d    |
+------+------+------+------+------------+
| a    | NULL | NULL | NULL | a          |
+------+------+------+------+------------+
| a    | NULL | NULL | d    | a; d       |
+------+------+------+------+------------+
| a    | NULL | c    | NULL | a; c       |
+------+------+------+------+------------+
| a    | NULL | c    | d    | a; c; d    |
+------+------+------+------+------------+
| a    | b    | NULL | NULL | a; b       |
+------+------+------+------+------------+
| a    | b    | NULL | d    | a; b; d    |
+------+------+------+------+------------+
| a    | b    | c    | NULL | a; b; c    |
+------+------+------+------+------------+
| a    | b    | c    | d    | a; b; c; d |
+------+------+------+------+------------+

จากนั้นคุณสามารถคัดลอกผลลัพธ์นี้ (เครื่องกำเนิดไฟฟ้าทำงานหนักเกือบทั้งหมดแล้ว) วางลงในแผ่นจดบันทึก ++ และล้างตามความเหมาะสม


5

หากคุณต้องแก้ปัญหาบรรทัดคำสั่งคุณยังสามารถใช้pandocกับตัวกรอง pandoc-placetable

วางตารางของคุณในfoo.txtและดำเนินการ:

pandoc-placetable --file=foo.txt --delimiter="\t" --header | pandoc -f json -t markdown-simple_tables-multiline_tables -o output.md

ซึ่งผลลัพธ์ในสิ่งต่อไปนี้output.md:

| a    | b    | c    | d    | cat        |
|------|------|------|------|------------|
| NULL | NULL | NULL | NULL | NULL       |
| NULL | NULL | NULL | d    | d          |
| NULL | NULL | c    | NULL | c          |
| NULL | NULL | c    | d    | c; d       |
| NULL | b    | NULL | NULL | b          |
| NULL | b    | NULL | d    | b; d       |
| NULL | b    | c    | NULL | b; c       |
| NULL | b    | c    | d    | b; c; d    |
| a    | NULL | NULL | NULL | a          |
| a    | NULL | NULL | d    | a; d       |
| a    | NULL | c    | NULL | a; c       |
| a    | NULL | c    | d    | a; c; d    |
| a    | b    | NULL | NULL | a; b       |
| a    | b    | NULL | d    | a; b; d    |
| a    | b    | c    | NULL | a; b; c    |
| a    | b    | c    | d    | a; b; c; d |

หากต้องการอ่านจาก STDIN ให้ปล่อย--fileอาร์กิวเมนต์ไว้ หากต้องการพิมพ์ไปที่ STDOUT ให้ปล่อย-oอาร์กิวเมนต์ไว้


3

แนวคิดของ ruslan เกี่ยวกับการใช้columnคำสั่งUnix / Linux เป็นคำสั่งที่ดี แต่บรรทัดคำสั่งที่ให้ไว้ในคำตอบนั้นใช้งานไม่ได้ ก่อนอื่น columnไม่รู้จัก\t(หรือ\\t) บนบรรทัดคำสั่งเป็นแท็บ หากคุณมีbashคุณสามารถทำได้

column -t -s$'\t' foo.txt

มิฉะนั้นคุณสามารถทำได้

column -t -s"$(printf '\t')" foo.txt

แต่ถึงอย่างนั้นก็ไม่ได้ตอบคำถาม คุณสามารถรับแท่งแนวตั้งได้ด้วยการทำ

column -t -s$'\t' -o' | ' foo.txt

ซึ่งผลิตผลเช่น

a    | b    | c    | d    | cat
NULL | NULL | NULL | NULL | NULL
NULL | NULL | NULL | d    | d
NULL | NULL | c    | NULL | c
NULL | NULL | c    | d    | c; d
NULL | b    | NULL | NULL | b
NULL | b    | NULL | d    | b; d
NULL | b    | c    | NULL | b; c
NULL | b    | c    | d    | b; c; d
a    | NULL | NULL | NULL | a
a    | NULL | NULL | d    | a; d
a    | NULL | c    | NULL | a; c
a    | NULL | c    | d    | a; c; d
a    | b    | NULL | NULL | a; b
a    | b    | NULL | d    | a; b; d
a    | b    | c    | NULL | a; b; c
a    | b    | c    | d    | a; b; c; d

การเพิ่มเส้นประหลังจากส่วนหัวด้วยตนเองไม่น่าเบื่อ


หากคุณไม่สามารถเข้าถึงระบบ Unix / Linux แบบเต็มคุณสามารถใช้ Cygwin หรือหนึ่งในสิ่งที่ชอบ Unix อื่นสำหรับสิ่งนี้


คุณไม่ได้แสดงความคิดเห็นกับคำตอบของฉันเพื่อชี้ให้เห็นว่าอาจใช้งานไม่ได้ ฉันถูกเข้าใจผิดโดยเอาท์พุทเทอร์มินัลซึ่งจัดแนวข้อความเนื่องจากแท็บเป็น 8 ตัวอักษรโดยค่าเริ่มต้น (ไม่เหมือนกับset ts=4การตั้งค่าVim ของฉัน)
Ruslan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.