Masalah ini terkait dengan upaya saya untuk mengimpor pertanyaan dan jawabannya dalam file Excel ke file .txt - yang ditangani oleh program kartu flash Anki seperti yang dijelaskan di sini.
Saya tidak dapat memiliki lebih dari 2 bidang jadi saya perlu membuat opsi satu bidang .
Data disimpan sebagai CSV dari LibreOffice (titik koma sebagai pemisah bidang – hanya membedakan apa yang dikatakan manual) seperti yang diinstruksikan dalam manual Anki
Question ipsun; option 1 ; option 2 ; option 3 ; option 4 ; ... ; option n
Question ipsun; option 1 ; option 2 ; option 3 ; option 4 ; ... ; option n
...
di mana setiap entri dengan semua opsi berada dalam satu baris yaitu satu "kartu flash". Dalam satu kartu, bagian depan sebelum titik koma, dan bagian belakang setelah titik koma. Kartu flash kedua di baris baru dan seterusnya.
Output yang diinginkan yang harus dalam UTF-8
Question ipsun; option 1 | option 2 | option 3 | option 4 | ... | option n
Question ipsun; option 1 | option 2 | option 3 | option 4 | ... | option n
...
Kodesemu saya di Perl berdasarkan jawaban ini
perl -00 -pe s/;/\0/; s/;/ |/g; s/\0/;/' file
Dikomentari
perl -00 -pe ' # each record is separated by blank lines (-00)
# read the file a record at a time and auto-print (-p)
s/;/\0/; # turn the first semicolon into a null byte
s/;/ |/g; # replace all other semicolons with " |"
s/\0/;/ # restore the first semicolon
' file
Bagaimana cara mengganti semua titik koma setelah titik koma pertama?
Jawaban yang Diterima:
sed 'y/|;/\n|/;s/|/;/;y/\n/|/' <<\IN
Question ipsun; option 1 ; option 2 ; option 3 ; option 4 ; ... ; option n
IN
Perhatikan bahwa ini tidak gunakan regexp untuk menangani sebagian besar penggantian, tetapi gunakan (dan jauh lebih berkinerja) yang lebih mendasar terjemahan berfungsi untuk melakukannya – dan melakukannya dengan cara portabel POSIX. Ini harus bekerja pada mesin apa pun dengan POSIX sed
terpasang.
Ini menerjemahkan ;
titik koma ke |
pipa dan |
pipa ke \n
ewline secara bersamaan. |
pipa disisihkan sebagai \n
ewlines jika terjadi pada jalur input. Kemudian s///
menggantikan |
. yang muncul pertama kali pipa untuk ;
titik koma, lalu terjemahkan semua \n
baris ke |
pipa – dengan demikian memulihkan semua yang mungkin telah disisihkan untuk menangani s///
. tunggal dengan kuat substitusi.
Sementara saya menggunakan <<\IN
di sini-dokumen demi demonstrasi salin/tempel, Anda mungkin harus menggunakan <infile >outfile
.
OUTPUT:
Question ipsun; option 1 | option 2 | option 3 | option 4 | ... | option n