この問題は、Excelファイルの質問とその回答をAnkiフラッシュカードプログラムがここで説明するように処理する.txtファイルにインポートしようとしたことに関連しています。
2つを超えるフィールドを設定できないため、オプションを1つのフィールドにする必要があります。 。
Ankiマニュアルの指示に従って、LibreOfficeからCSVとして保存されたデータ(フィールド区切り文字としてのセミコロン–マニュアルの内容のみを区別)
Question ipsun; option 1 ; option 2 ; option 3 ; option 4 ; ... ; option n
Question ipsun; option 1 ; option 2 ; option 3 ; option 4 ; ... ; option n
...
ここで、すべてのオプションを含む各エントリは1行にあります。つまり、1つの「フラッシュカード」です。 1つのカードで、前部はセミコロンの前に、後部はセミコロンの後にあります。改行などの2番目のフラッシュカード。
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
...
この回答に基づくPerlの擬似コード
perl -00 -pe s/;/\0/; s/;/ |/g; s/\0/;/' file
コメント
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
最初のセミコロンの後にすべてのセミコロンを置き換えるにはどうすればよいですか?
承認された回答:
sed 'y/|;/\n|/;s/|/;/;y/\n/|/' <<\IN
Question ipsun; option 1 ; option 2 ; option 3 ; option 4 ; ... ; option n
IN
これはではないことに注意してください 置換の大部分を処理するために正規表現を使用しますが、より基本的な(そしてはるかにパフォーマンスの高い)を使用します 翻訳 そうするための機能–そしてPOSIXポータブルな方法でそうします。これは、POSIX sed
を備えたすべてのマシンで機能するはずです。 インストールされています。
;
を翻訳します |
へのセミコロン パイプと|
\ n
にパイプします 同時にewlines。 |コード> パイプは
\n
として確保されます 入力行で発生した場合のewlines。次に、 s ///
最初に発生する|
を置き換えます ;
のパイプ セミコロン、次にすべての \ n
を翻訳します |
へのewlines パイプ–したがって、単一の s ///
を堅牢に処理するために取っておいた可能性のあるものを復元します 置換。
<<\ IN
を使用している間 ヒアドキュメント-コピー/貼り付け可能なデモンストレーションのために、おそらく
を使用する必要があります 。
出力:
Question ipsun; option 1 | option 2 | option 3 | option 4 | ... | option n