Saya punya pertanyaan menarik. Bayangkan saya memiliki banyak data yang berubah dalam interval yang sangat cepat. Saya ingin menampilkan data itu sebagai tabel di aplikasi konsol. f.ex:
-------------------------------------------------------------------------
| Column 1 | Column 2 | Column 3 | Column 4 |
-------------------------------------------------------------------------
| | | | |
| | | | |
| | | | |
-------------------------------------------------------------------------
Bagaimana cara menjaga segala sesuatunya cepat dan cara memperbaiki lebar kolom? Saya tahu bagaimana melakukan itu di java, tapi saya tidak tahu bagaimana melakukannya di C #.
Jawaban:
Anda dapat melakukan sesuatu seperti berikut:
sumber
Gunakan String.Format dengan nilai perataan.
Sebagai contoh:
Untuk membuat satu baris yang diformat.
sumber
-
untuk konten rata kiri, misalnya:{0,-5}
Edit: berkat @superlogical, Anda sekarang dapat menemukan dan meningkatkan kode berikut di github !
Saya menulis kelas ini berdasarkan beberapa ide di sini. Lebar kolomnya optimal, dan dapat menangani array objek dengan API sederhana ini:
Ini kelasnya:
Sunting: Saya menambahkan perbaikan kecil - jika Anda ingin tajuk kolom menjadi nama properti, tambahkan metode berikut ke
TableParser
(perhatikan bahwa ini akan menjadi sedikit lebih lambat karena refleksi):sumber
arrValues[rowIndex, colIndex] = valueSelectors[colIndex].Invoke(values[rowIndex - 1]).ToString();
denganvar val = valueSelectors[colIndex].Invoke(values[rowIndex - 1]); arrValues[rowIndex, colIndex] = val == null ? "null" : val.ToString();
cara ini menunjukkan null.Ada beberapa pustaka sumber terbuka yang memungkinkan pemformatan tabel konsol, mulai dari yang sederhana (seperti contoh kode dalam jawaban di sini) hingga yang lebih canggih.
Meja konsol
Dilihat dari statistik NuGet, pustaka paling populer untuk tabel pemformatan adalah ConsoleTable . Tabel dibuat seperti ini (dari file readme):
Tabel dapat diformat menggunakan salah satu gaya yang telah ditentukan sebelumnya. Ini akan terlihat seperti ini:
Pustaka ini mengharapkan sel baris tunggal tanpa pemformatan.
Ada beberapa pustaka berdasarkan ConsoleTable dengan set fitur yang sedikit diperpanjang, seperti lebih banyak gaya garis.
CsConsoleFormat
Jika Anda membutuhkan pemformatan yang lebih kompleks, Anda dapat menggunakan CsConsoleFormat . † Berikut adalah tabel yang dihasilkan dari daftar proses (dari proyek contoh):
Hasil akhirnya akan terlihat seperti ini:
Ini mendukung semua jenis baris tabel (beberapa disertakan dan dapat disesuaikan), sel multi-baris dengan bungkus kata, warna, kolom yang tumbuh berdasarkan konten atau persentase, perataan teks, dll.
† CsConsoleFormat dikembangkan oleh saya.
sumber
TextWrap = TextWrapping.NoWrap
tidak seperti pada contoh di atas).new Cell(text) { Color = text == "true" ? Green : Red }
. Jika Anda memiliki banyak tabel dengan aturan pemformatan yang serupa, Anda dapat meletakkan kode itu ke dalam beberapa fungsi, baik itu untuk sel, baris, atau seluruh tabel.sumber
StreamWriter
menjadiTextWriter
. 2. GantikanPrintToConsole
kode dengan:PrintToStream(arrValues, Console.Out);
3. ??? 4. KEUNTUNGAN!Saya ingin kolom dengan lebar variabel, dan saya tidak terlalu peduli dengan karakter kotak. Juga, saya perlu mencetak beberapa informasi tambahan untuk setiap baris.
Jadi jika ada orang lain yang membutuhkannya, saya akan menghemat beberapa menit:
Keluaran:
sumber
Ini merupakan perbaikan dari jawaban sebelumnya. Ini menambahkan dukungan untuk nilai dengan panjang dan baris yang bervariasi dengan jumlah sel yang bervariasi. Sebagai contoh:
Ini kodenya:
sumber
Jika ini membantu seseorang, ini adalah kelas sederhana yang saya tulis untuk kebutuhan saya. Anda dapat mengubahnya dengan mudah agar sesuai dengan kebutuhan Anda.
Penggunaan sampel:
Keluaran:
sumber
Saya memiliki proyek di GitHub yang dapat Anda gunakan
https://github.com/BrunoVT1992/ConsoleTable
Anda bisa menggunakannya seperti ini:
Ini akan memberikan hasil ini:
sumber
Gunakan pustaka MarkDownLog (Anda dapat menemukannya di NuGet)
Anda cukup menggunakan ekstensi ToMarkdownTable () ke koleksi apa pun, ia melakukan semua pemformatan untuk Anda.
Outputnya terlihat seperti ini:
sumber
sumber
Lebih mudah di VisualBasic.net!
Jika Anda ingin pengguna dapat memasukkan data ke dalam tabel secara manual:
Ini akan terlihat seperti ini:
sumber