Chuyển đổi các giá trị được phân tách bằng tab thành bảng ASCII


8

Cách hiệu quả nhất để chuyển đổi dữ liệu được phân tách bằng tab như thế này là gì:

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

Một cái gì đó gần với điều này:

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

Hiện tại tôi sử dụng Notepad ++ như sau:

  1. Chuyển đổi các tab thành không gian
  2. Căn chỉnh dữ liệu theo cách thủ công
  3. Sử dụng chế độ cột để chèn các đường ống

Bước thứ hai là bước tẻ nhạt nhất và tôi muốn có ít nhất phần này tự động.

Lưu ý: Tôi sử dụng trình duyệt khi làm việc và đôi khi tôi có trình soạn thảo văn bản mở bên cạnh. Giải pháp hiệu quả là giải pháp đòi hỏi ít nỗ lực nhất. Tôi có thể sử dụng:

  • Notepad ++
  • Trình chỉnh sửa văn bản chung với hỗ trợ tìm / thay thế regex
  • JavaScript gõ vào bảng điều khiển trình duyệt
  • Dịch vụ web trực tuyến
  • PHP trên dòng lệnh ( php -a)

4
Bạn ở môi trường nào Những công cụ nào bạn có sẵn? Bạn quen thuộc với ai trong số đó? Những cái nào bạn sẵn sàng - hoặc không muốn - sử dụng? Làm thế nào để bạn xác định "hiệu quả" cho mục đích của câu hỏi này? Có lẽ có nhiều cách để thực hiện công việc như có những người muốn làm nó; bạn cần cung cấp thêm thông tin Xem cách đặt câu hỏi hay.
Jeff Zeitlin

@JeffZeitlin Tôi sẽ cập nhật câu hỏi.
Salman A

Đó là một awkkịch bản đơn giản .
Barmar

@Barmar Tôi không sử dụng awk nhưng tôi chắc chắn người khác sẽ thấy nó hữu ích.
Salman A

hỏi một câu hỏi PCG về nó - lulz sẽ xảy ra. Đợi đã, nó đã được hỏi ... codegolf.stackexchange.com/questions/100613/ ((lưu ý rằng TSV-> CSV chỉ là một sự khác biệt duy nhất ... {{(⊃⍵)⍪⍉⍪↑¨↓⍉↑1↓⍵}s¨'⎕T'⎕T¨(s←1↓¨⊢⊂⍨⊢=⊃)¯1⌽⍵}có vẻ đủ tốt để hoạt động, eh?)

Câu trả lời:


9

Làm cách nào tôi có thể chuyển đổi các giá trị được phân tách bằng tab thành bảng ASCII?

Tôi sử dụng Trình tạo bảng văn bản cho loại nhiệm vụ này.

Tôi đã dán dữ liệu của bạn trên trang đó và nó đã tạo bảng sau:

+------+------+------+------+------------+
| 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 |
+------+------+------+------+------------+

Sau đó, bạn có thể sao chép đầu ra này (trình tạo đã thực hiện hầu hết các công việc khó khăn), dán vào notepad ++ và dọn dẹp khi thích hợp.


5

Nếu bạn cần một giải pháp dòng lệnh, bạn cũng có thể sử dụng pandoc với bộ lọc có thể đánh dấu pandoc .

Đặt bảng của bạn vào foo.txtvà thực hiện:

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

Kết quả nào sau đây 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 |

Để đọc từ STDIN, bỏ qua --fileđối số. Để in ra STDOUT, bỏ qua -ođối số.


3

Ý tưởng của ruslan về việc sử dụng lệnh Unix / Linux columnlà một ý tưởng hay, nhưng dòng lệnh được đưa ra trong câu trả lời của họ không hoạt động tốt. Trước hết, columnkhông nhận ra \t(hoặc \\t) trên dòng lệnh dưới dạng tab. Nếu bạn có bash, bạn có thể làm

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

Nếu không, bạn có thể làm

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

Nhưng ngay cả điều đó không trả lời câu hỏi. Bạn có thể có được các thanh dọc bằng cách làm

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

tạo ra sản lượng như

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

Thêm dòng gạch ngang sau tiêu đề thủ công không quá tẻ nhạt.


Nếu bạn không có quyền truy cập vào hệ thống Unix / Linux đầy đủ, bạn có thể sử dụng Cygwin hoặc một trong những ứng dụng Unix khác cho việc này.


Bạn thậm chí không bình luận về câu trả lời của tôi để chỉ ra rằng nó có thể không hoạt động. Tôi đã bị nhầm lẫn bởi đầu ra thiết bị đầu cuối đã căn chỉnh văn bản do các tab là 8 ký tự theo mặc định (không giống như set ts=4cài đặt Vim của tôi ).
Ruslan
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.