• ベストアンサー

バイナリファイルに改行コードを追加したい

C言語でマルチバイト文字(全角文字)を含めたバイナリファイル(改行のないテキストファイル)に指定したバイト長ごとに改行コードを追加するにはどのようにしたら良いのでしょうか?。 漠然とですがfopen()とfread()などを使うんだろうと おもうのですが、読み込んだ文字数の計算方法がわかりません。 どなたかご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

fgetsのほうがいいのでは? http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_crt_fgets.2c_.fgetws.asp これで、指定バイト数ずつ読んで、書き込むときに改行コードを付加すればご希望のことができます。 ただ、 >マルチバイト文字(全角文字)を含めたバイナリファイル 指定したバイト数がマルチバイト文字の途中だったらどうするんですか? こちらのほうが心配ですけど。

関連するQ&A

  • 改行コードの謎

    現在、VisualStudioを使ってCプログラムを作成してるのですが、ファイルについて質問があります。 あるテキストデータをfopen()でオープンし、その後fread()を使ってデータを取得しそのメモリをデバッガで参照すると改行がLFのみになっているですがこれはなぜなのでしょうか? バイナリエディタで参照すると改行はCRLFなのですが...。

  • 追加書き込みと改行コードについて

     お世話になっております。  PHPの初心者です。  PHPの追加書き込みの件で質問です。テキストファイルにテキストを追加書き込みしようと思い、以下のように書きました。 $fp = fopen('data.txt', 'a'); flock($fp, LOCK_EX); $return = fputs($fp, "$namen"); flock($fp, LOCK_UN); fclose($fp);  これでファイルに追加で書き込みはできるのですが、文末に直接つながってしまい改行されないですよね?一度書き込まれるごとに改行したいのですが、改行コードが\nでは追加で書き込みができなくなってしまいました。$returnの値がゼロになってしまいファイルに何も書き込まれなくなってしまいました。 $return = fputs($fp, "$namen\n"); ←この部分に\nを書き足しました。  文字コードはUTF-8で書き、改行コードはLFで統一しています。  PHPの改行コードについてわかる方がいましたらおしえてください。  

    • 締切済み
    • PHP
  • PHPのfopenのバイナリモードについて

    PHPのfopen時のバイナリモードについて質問です。 PHPのマニュアルにはWINDOWSのようなバイナリとテキストモードの形式の違う システムでは、画像等のバイナリファイルを扱うときはbを付けてバイナリモードで扱うことが推奨されていますが、 WINDOWS環境でためしたところ、画像ファイルをバイナリではなくテキストモードで開いて中身のデータを読み込んで、別名でfopen("~.jpg","w")で書き込んでも、きちんと表示される画像が作成されました。 テキストモードでバイナリファイルを開いても読み込めってさらに、新規でかきこめるなら なぜ二つのモードが存在するのでしょうか? ちなみに、WINDOWSにおけるバイナリとテキストモードの違いって改行文字が ¥nか¥r¥nの違いだけでしょうか? リナックスではバイナリもテキストも中身の改行文字は¥nとなるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • ExcelVBA バイナリファイルの全半角の判断

    Excel VBAでテキストファイルを、バイナリファイルとして読込み シートに出力しようとしています。 しかしテキストファイルには全角半角が混ざっており、うまく出力できません。 Dim buf As Byte 上記の変数に読込んだバイナリデータ1バイト分を入れるとして、 これが半角文字なのか、全角文字の半分なのか、判断することはできるのでしょうか。

  • freadとfwrite

     C言語初心者です。 fopenでテキストファイルで読み込んで,freadやfwriteなどは使っていいのでしょうか? 入門書などでは、freadやwriteはバイナリファイルでしか使っていないので疑問になりました。

  • バイナリコードを見つけ出すツールを教えてください

    私のパソコン内にテキストコードのみで構成される拡張子がtxtやhtmlのファイルが大量にあります。 パソコンがウイルスに感染すると、パソコン内のファイルがいつの間にか変更されていることがありますが、変更されているかどうかを調べるためにバイナリコードを見つけ出すツールを探しています。 テキストコードのみで構成されていたファイルの中身が変更されていたなら、バイナリコードが付加されているはずなので、バイナリコードを見つけ出すことが出来れば、そのファイルの中身が変更されていることが分かるという判断です。 notepadでバイナリファイルを開くと、黒い四角や難しい漢字、半角のカタカナなどが表示されるので、とりあえず その黒い四角 をコピーして 試しに GrepReplaceで、検索文字列の欄に 黒い四角 をペーストして、あるファイル(テキストコードのみのファイルにバイナリファイルを結合させたファイル)の中身を検索しましたが、 黒い四角があるはずなのに、GrepReplaceでは残念ながらヒットしませんでした。 バイナリコードである 黒い四角 を検索文字列にして検索をすると、的確にヒットするツールがあれば教えてください。 またバイナリコードが含まれているかどうかについて、数多くのファイルを一括して調べることが出来るツールがあれば教えてください。

  • バイナリファイルとバイナリ文字列の違い

    がわかりません。 例えば >http://e-words.jp/w/E38390E382A4E3838AE383AAE58897.html をみるとバイナリ列は1バイトを連ねたものだというらしいです。 つまり【文】という文字列を文字コードUTF-8でバイト配列化すると [1] => 230 [2] => 150 [3] => 135 となります。 (これはPHPでunpackかけましたが他の言語のGetBytes()などでも同じバイト値がでました。) この【文】という文字列はバイナリ列になるわけですよね? 例えばこの【文】という文字だけを保存したbun.txtというファイルはバイナリーファイルに なるのでしょうか? バイナリファイルの定義をみると >http://e-words.jp/w/E38390E382A4E3838AE383AAE38395E382A1E382A4E383AB.html 上記URLだと >文字コードの範囲などを考慮せずに作成されたファイル というのがバイナリファイルであるとあります。 つまりバイナリファイルとは 1バイト・・つまり8ビット(0~255)までの数値で表したものを連ねたもので なおかつ、文字コードなどの解釈を一切行わなずに、バイト値のみが記述されたデータと おもってもよいのでしょうか?

  • Cでバイナリデータを変換

    今持っているバイナリファイルfile1.x86をテキストファイルfile1.txtに変換したいんですけどうまくいきません。fopenとfreadでバイナリファイルを読み込むところまで入っていると思うんですけど、テキストファイルとして書き出すことができません。 #include <stdio.h> main() { short a[32000]; FILE *infile, *outfile; infile = fopen("iroha.x86", "r"); outfile = fopen("iroha.dat", "w+"); fread( a, sizeof(short), 32000, infile ); fwrite( a, sizeof(short), 32000, outfile ); fclose(infile); fclose(outfile); } これだとそのまんま出力されるんです。当たり前なんですけど... どこをどう変えればいいか教えてください。 よろしくお願いします。

  • 改行のないテキストファイルに改行コードをつけたい

    いつもお世話になっています。 perlで困っていることがあるので、質問させてください。 大容量のテキストファイルを指定バイトで改行したいのですが、 どういった方法があるのでしょうか。 具体的には100000バイト近くあるファイルを200バイトごとに区切りたいのです。syswriteで何とかなるのかな?と思って試行錯誤しているのですが、 ファイルの末尾に1個改行が入るだけで、思ったような挙動をしてくれません。 正直かなりこまっているので、何かヒントをいただけないでしょうか。 よろしくお願いいたします。

  • テキストファイルに改行コードを付加してレコードを分割したい。

    テキストファイルに改行コードを付加してレコードを分割したい。 MSDOSテキストファイルで、1レコードのサイズが128バイトのテキストファイルが あるのですが、レコード間に改行コードがありません。 レコード10件なら1280バイト 20件なら2560バイトのファイルです。 これを128バイトごとに改行コードを付加できるようなソフトはないでしょうか? ファイル分割ではなく、レコードの分割ができる物を探しています。 よろしくお願いします。

専門家に質問してみよう