- ベストアンサー
1レコードからなるファイルを複数レコードに分割
可変長の1レコードのみのファイル(固定長のレコードが改行コードなくつながっている)をもとにして、固定長のcsvファイルを作成する方法をお教えください。 具体的には、 項目A(10バイト)、項目B(5バイト)、項目C(20バイト)からなる35バイトのデータが改行コードなくつながっている50000バイトくらいの1レコードを入力して、項目A,B,Cから1レコードが構成されるcsvファイルを作成したいと思います。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
> 説明が足りませんでした。初めての投稿で慣れていない故、お許しください。 慣れないうちは仕方ないです。求められたらちゃんと補足すればいいんじゃないですかね。最近は補足を求めても返ってこないばかりか、逆質問するなとキレる人もいます。 というわけで、本題。補足ではフリーソフトを使ってはいけないと書かれてませんから、Windows 版の SED でいかがですか。SED は先の回答で使ったプログラムですが、Windows 7 にも対応してるようです。Linux 版と挙動が異なる可能性はありますが(オプションの指定方法など)、解決できる範囲でしょう。 なお、sed の基本的な使い方と、Windows へのインストール方法などは参考 URL を見てください。
その他の回答 (3)
Unix 系のコマンドなら楽にできる。期待してる回答ではないと思うが、作業条件についてそちらの希望がよくわからないので、あえて回答する。 回答欄のスペース上、項目A(3バイト)、項目B(2バイト)、項目C(5バイト)とする。OS は Linux Mint で試した。 $ cat src.txt ABCDEFGHIJ0123456789abcdefghij $ sed -r 's/(.{3})(.{2})(.{5})/\1,\2,\3\n/g' src.txt ABC,DE,FGHIJ 012,34,56789 abc,de,fghij 希望する条件をもう少し補足すると良い回答がくるかもしれない。Windows のバージョンは必須(実際には書かれてないけど、"バッチ" というんだから Windows なんでしょうね)。 また、会社の PC だから新しいソフトをインストールできないなどの事情もあるでしょう。逆に、個人の PC だからこれを機会に Linux を導入してもいいとか。 それとデータの内容だけど、日本語などのマルチバイト文字は含まないってことでいいんだろうか?
お礼
皆様、本当にありがとうございます。m(_)m 説明が足りませんでした。初めての投稿で慣れていない故、お許しください。 環境はWindows7です。 また、データに日本語はありません。英数字、空白のみです。
- catpow
- ベストアンサー率24% (620/2527)
>>レコードがかなり大きく、できればバッチファイルで処理したいと思います。その場合、1バイトずつ処理し、しかるべき位置にカンマや改行をセットするしかないのでしょうか? バッチファイルでの処理は無理でしょう。 Windows7以降なら、OSに標準でPowerShellが入っていますから、それを使えば可能になる気がします。 とはいえ、このPowerShellを使いこなすには、Perlなどを使うのと同じ位か、ネットでサンプルが探しにくいから、それ以上に難易度が上がるかもしれませんが・・・。
- catpow
- ベストアンサー率24% (620/2527)
固定長35byte単位でレコードを読んで、CSV出力するプログラムを作成します。 言語としては、Perl,RubyやC#などが使いやすいですよ。
補足
なるほど!無理やり固定長にしてしまうのですね。思いつきませんでした。 ただ、新たな制約が出てきて、、、レコードがかなり大きく、できればバッチファイルで処理したいと思います。その場合、1バイトずつ処理し、しかるべき位置にカンマや改行をセットするしかないのでしょうか?
お礼
初めての質問で不足事項が多かったにも関わらず、こちらの状況をいろいろ想像しながら答えてくださった好意に感謝します。 最終的には技術部門の方、顧客と検討の結果、vbsを使うことになりました。 お世話になりました。 sedも個人的には興味あるので、自宅PCで使ってみます。