質問: COBOL出身で、C#で苦戦しています。。。 題名のとおり、タブ区切りのファイルを読み込み、 出力時に、21バイト以上の文字を削除して、出力したいのですが、 まったくわかりません。 COBOLだと、変数を固定長で定義できるので、 変数 A PIC K(20) K・・・全角文字、半角文字混在 と変数Aを定義して、代入してあげると勝手に21バイト以上の文字は削除されるのですが、 c#だとどのようにすれば、よいのでしょうか? 入力文字列(全角、半角混在) 東京都葛飾区島根1--!2 出力時 "東京都葛飾区島根1--!" と出力したい。”2”は、20-21バイトでまたがっているので削除 最終目的はPDFでの印書までですが、文字の編集で止まってしまったので 質問致しました。 ベテランの方のご意見を頂きたく。 よろしくお願いいたします。
回答: SJISなら * 文字列をバイト配列に変換 * 必要な分を取り出し * 取り出した結果の最後の1バイトが全角文字の半分だったら切り捨て な方法が考えられます 最後の1バイトが全角文字の半分かの判定は、VB.Netだとわりとメジャーな技(vb6時代のMidBがまさしくこの動作をしていたので)なのですが、 * 切り出したバイト配列をEncoding.GetStringでSJIS文字列にデコード して * Encoding.GetByteCountでデコードしたSJIS文字列のバイト数を取る と * 最後の1バイトが全角文字の半分 の時は * 元のバイト数 + 1 の値が返ってくることが利用できます たぶんC#でも同じ動きになるはずなので、試されてはどうでしょう