【c言語】テキストファイルからバイト数を算出したい

このQ&Aのポイント
  • 自然言語処理について勉強しています。Wikipediaのdumpデータから本文を抜き出して処理をしようと思っています。xmlの処理について試しているのですが、欲しい出力は,,<title>~~</title>のシークポイント(pb[0])と〜〜部分のバイト数(pb[1])の記入されたファイルです.
  • プログラミング構成: jawiki-20211220-pages-articles-multistream2.xml(読み込み先のテキストファイル), Wiki_getter1_Byte.c(バイト数を算出するプログラム,<Page>〜〜</page>間は取得できています), Wikigetter2_text.c(getter1の出力ファイル(get_text_Byte.txt系列)からシークポイントまでfseekしてバイト数分freadしてテキストファイルに記入上と同じくページ全体とテキスト部分が取得できています)。
  • 読み取ったシークポイントとバイトからxmlを抽出するプログラムは既にできているのでこの出力が正しくできるようになりたいです.よく言われますが外部ライブラリは利用しない方向でお願いします。
回答を見る
  • ベストアンサー

【c言語】テキストファイルからバイト数を算出したい

やりたいこと 自然言語処理について勉強しています。 Wikipediaのdumpデータから本文を抜き出して処理をしようと思ってます。 xmlの処理について試しているのですが、 欲しい出力は,,<title>~~</title>のシークポイント(pb[0])と〜〜部分のバイト数(pb[1])の記入されたファイルです. シークポイントとバイト数さえわかれば後述の2つ目のプログラムを使って 後述の実行結果のpb[0]部分が0と表示されていて困ってます. プログラミング構成 jawiki-20211220-pages-articles-multistream2.xml(読み込み先のテキストファイル) Wiki_getter1_Byte.c(バイト数を算出するプログラム,<Page>〜〜</page>間は取得できている.) Wikigetter2_text.c(getter1の出力ファイル(get_text_Byte.txt系列)からシークポイントまでfseekしてバイト数分freadしてテキストファイルに記入上と同じくページ全体とテキスト部分が取得できている.) 以下にソースコードを貼り付けます。 ======== やりたいこと 自然言語処理について勉強しています。 Wikipediaのdumpデータから本文を抜き出して処理をしようと思ってます。 xmlの処理について試しているのですが、 欲しい出力は,,<title>~~</title>のシークポイント(pb[0])と〜〜部分のバイト数(pb[1])の記入されたファイルです. シークポイントとバイト数さえわかれば後述の2つ目のプログラムを使って 後述の実行結果のpb[0]部分が0と表示されていて困ってます. プログラミング構成 jawiki-20211220-pages-articles-multistream2.xml(読み込み先のテキストファイル) Wiki_getter1_Byte.c(バイト数を算出するプログラム,,欲しいのは<text>~~</text>,<title>~~</title>,<id>~~</id>間のバイト.) Wikigetter2_text.c(getter1の出力ファイル(get_text_Byte.txt系列)からシークポイントまでfseekしてバイト数分freadしてテキストファイルに記入上と同じくページ全体とテキスト部分が取得できるプログラム.) 以下にソースコードを貼り付けます。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 256 * 1024 * 1024 int main() { size_t p, pb[2]; char *line = malloc(SIZE); FILE *fp = fopen("jawiki-20211220-pages-articles-multistream2.xml", "r"); FILE *fw = fopen("get_text_byte.txt", "w"); if ((NULL == fp) || (NULL == fw)) abort(); while (p = ftell(fp), fgets(line, SIZE, fp)) { if (strstr(line, "<page>")) { pb[0] = p; if (strstr(line, "</page>")) { pb[1] = pーpb[0]; } printf("%zu\t%zu\n", pb[0], pb[1]); } printf("process ok"); free(line); fclose(fw); fclose(fp); } ======== 読み取ったシークポイントとバイトからxmlを抽出するプログラムは既にできているのでこの出力が正しくできるようになりたいです. *よく言われますが外部ライブラリは利用しない方向でお願いします. 追記に出力の一例を記載しておきます. 補足 出力一例です.pb[1]が取得できてないようです. 1536318555 0 1536318555 0 1536318555 0 1536318555 0 1536318555 0 1536318555 0 1536318555 0 1536318555 0 1536318555 0 1536318555 0 1536318555 0 1536318555 0 1536318555 0 1536318555 0 1536318555 0 1536318555 0 process ok%

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

  • ベストアンサー
  • _kappe_
  • ベストアンサー率68% (1523/2217)
回答No.4

>具体的にはどのようにしたらアンサーの問題を解決できますか? 他の人も指摘しているとおり、まずは実際に実行したプログラムを補足に貼ってください。手入力し直すのではなく、コピー&ペーストを使ってください。 >pb[1] = p-pb[0]; <page>と</page>が同じ行に書かれていた場合はpとpb[0]の値が同じですから、引き算するとpb[1]の値は0になります。 <page>や</page>が現れた行内の位置を考慮する必要がありそうです。 最後に、単なる書き間違いだと思いますけど、プログラムでは<page>タグを調べようとしているのに、質問文では >欲しい出力は,,<title>~~</title>のシークポイント(pb[0])と〜〜部分のバイト数(pb[1])の記入されたファイルです. と書かれていますね。

study_prg
質問者

補足

編集はできなそうなので正式なソースコードをここに貼ります. ================ #include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 256 * 1024 * 1024 int main() { int p, pb[2]; char *line = malloc(SIZE); FILE *fp = fopen("jawiki-20211220-pages-articles-multistream2.xml", "r"); FILE *fw = fopen("get_text_byte.txt", "w"); // printf(fw,"startbyte\t記事のbyte \n"); if ((NULL == fp) || (NULL == fw)) abort(); while (p = ftell(fp), fgets(line, SIZE, fp)) { if (strstr(line, "<text")) { pb[0] = p; if (strstr(line, "</text>")) { pb[1] = p-pb[0]; } // fprintf(fw, "%zu\t%zu\n", pb[0], pb[1]); // ... // fprintf(fw, "%d\t%d\n", pb[0], pb[1]); ... テキスト形式で観察可能 } printf("%d\t%d\n", pb[0], pb[1]); } printf("process ok"); free(line); fclose(fw); fclose(fp); }

その他の回答 (5)

  • _kappe_
  • ベストアンサー率68% (1523/2217)
回答No.6

チェックするタグが<title>や<page>から今度は<text>に変わっています。他意はないのでしょうけれど、いい加減だなという印象を受けます。 とりあえず<text>ということにして、入力データの仕様を確認させてください。下記のパターンのうちのどれですか。 [A]<text>〜</text>は必ず同じ行内に現れる [A']同じ行内に<text>〜</text>が複数回現れることがありえる [B]<text>と対応する</text>は必ず別の行に現れる [C]<text>と対応する</text>は同じ行に現れることも別の行に現れることもある [A]の場合は、今貼られているプログラムのpb[0]やpb[1]の計算方法を変えれば対応できそうです。しかし、それ以外の場合はpb[0]やpb[1]の計算方法だけでなく他の部分も変える必要があります。

  • wormhole
  • ベストアンサー率28% (1622/5659)
回答No.5

「<title>~~</title>のシークポイント」というのは、 「<title>」の先頭の「<」の前の時点のシークポイントの意味ですか? とりあえずは、fgets(line, SIZE, fp)で読み込まれたlineが ________<title>~~~~</title> だった場合、p,pb[0],pb[1]はどう設定されるのか考えてみてください。

  • wormhole
  • ベストアンサー率28% (1622/5659)
回答No.3

fgets(line, SIZE, fp) で読み込んだlineの中に"<page>"と"</page>"が両方存在する場合には、その結果は別段おかしくないコードになっていますけど? C言語は変数定義しただけでは初期化まではやってくれないので pb[1]が設定されていないならpb[1]が0で出力される可能性は限りなく低いので >pb[1] = pーpb[0]; で設定はされているはずです。 後は#2の方も書かれていますが、質問に書いているコード写し間違えしていませんか?{}の数もあっていないですし。

study_prg
質問者

補足

編集はできなそうなので正式なソースコードをここに貼ります. ================ #include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 256 * 1024 * 1024 int main() { int p, pb[2]; char *line = malloc(SIZE); FILE *fp = fopen("jawiki-20211220-pages-articles-multistream2.xml", "r"); FILE *fw = fopen("get_text_byte.txt", "w"); // printf(fw,"startbyte\t記事のbyte \n"); if ((NULL == fp) || (NULL == fw)) abort(); while (p = ftell(fp), fgets(line, SIZE, fp)) { if (strstr(line, "<text")) { pb[0] = p; if (strstr(line, "</text>")) { pb[1] = p-pb[0]; } // fprintf(fw, "%zu\t%zu\n", pb[0], pb[1]); // ... // fprintf(fw, "%d\t%d\n", pb[0], pb[1]); ... テキスト形式で観察可能 } printf("%d\t%d\n", pb[0], pb[1]); } printf("process ok"); free(line); fclose(fw); fclose(fp); }

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

>pb[1] = pーpb[0]; ここの引き算がどうしても全角にしか見えないのですが、 持っているソースコードは「正確に」ここにアップされた物と同じですか?

study_prg
質問者

補足

編集はできなそうなので正式なソースコードをここに貼ります. ================ #include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 256 * 1024 * 1024 int main() { int p, pb[2]; char *line = malloc(SIZE); FILE *fp = fopen("jawiki-20211220-pages-articles-multistream2.xml", "r"); FILE *fw = fopen("get_text_byte.txt", "w"); // printf(fw,"startbyte\t記事のbyte \n"); if ((NULL == fp) || (NULL == fw)) abort(); while (p = ftell(fp), fgets(line, SIZE, fp)) { if (strstr(line, "<text")) { pb[0] = p; if (strstr(line, "</text>")) { pb[1] = p-pb[0]; } // fprintf(fw, "%zu\t%zu\n", pb[0], pb[1]); // ... // fprintf(fw, "%d\t%d\n", pb[0], pb[1]); ... テキスト形式で観察可能 } printf("%d\t%d\n", pb[0], pb[1]); } printf("process ok"); free(line); fclose(fw); fclose(fp); }

  • _kappe_
  • ベストアンサー率68% (1523/2217)
回答No.1

fgets()は行単位でデータを読み込みます。 質問文にあるプログラムの書き方だと、if (strstr(line, "</page>"))のチェックはその前のif (strstr(line, "<page>"))が成功したlineに対してだけ行われます。つまり、<page>と</page>が別の行に置かれているデータの場合、pb[1]がセットされることはありません。

study_prg
質問者

補足

わかりやすい解答ありがとうございます。 具体的にはどのようにしたらアンサーの問題を解決できますか?

関連するQ&A

  • 【c言語】ファイルの読み込みエラーについて

    自然言語処理について勉強しています。 Wikipediaのdumpデータからタイトルと本文を抜き出して処理をしようと思ってます。 xmlの処理について試しているのですが、エラーに見舞われて困っています。 プログラミングはあまり得意ではないです。 以下にソースコードとエラー部分を貼り付けます。 ご助力お願いします。 ============================ #include <stdlib.h> #include <string.h> int main (){ size_t p; char pb[5]; char line[BUFSIZ]; FILE *fp = fopen("//Wikipediaの分割ファイル//.xml", "r");//xmlファイルのアドレス char title[BUFSIZ]; //FILE *gt=fopen("list_1.txt","r"); FILE *fw = fopen("get_text_c.txt", "w"); if ((NULL == fp)||(NULL== fw )){ printf("aboooooooooooooooooooooooooooot") abort();//終了、ここがうまくいってない? } while (p = ftell(fp), fgets(line, BUFSIZ, fp)) { if (strstr(line, "<title>")){ pb[0] = p;//タイトルの始点 } else if (strstr(line, "</title>")){  pb[3]=p;//タイトルの終点   pb[2]=p-pb[0];//タイトルのバイト数  fprintf(fw, "%zu \t %zu \n", pb[2], pb[3]); //pb2とpb3の観察。  fgets(line,pb2[2],pb[0]);//タイトルを取得  printf("%s",line);//表示  fprintf(fw,"%s",line);//書き込み } else if (strstr(line, "</page>")) {  pb[1] = p - pb[0];  //fwrite(pb, sizeof(size_t), 2, fw); // ...  fprintf(fw, "%zu \t %zu \n", pb[0], pb[1]); //... テキスト形式で観察可能 } } } fclose(fw); fclose(fp); } エラー(ファイル名は get_うぃき.c としてます。) =========================== get_うぃき.c:10:16: warning: declaration of built-in function 'fopen' requires inclusion of the header <stdio.h> [-Wbuiltin-requires-header] get_うぃき.c:11:16: error: use of undeclared identifier 'BUFSIZ' char title[BUFSIZ]; ^ get_うぃき.c:14:5: error: use of undeclared identifier 'FILE' FILE *fw = fopen("get_text_c.txt", "w"); ^ get_うぃき.c:14:11: error: use of undeclared identifier 'fw' FILE *fw = fopen("get_text_c.txt", "w"); ^ get_うぃき.c:15:18: error: use of undeclared identifier 'fp' if ((NULL == fp)||(NULL== fw )){ ^ get_うぃき.c:15:31: error: use of undeclared identifier 'fw' if ((NULL == fp)||(NULL== fw )){ ^ get_うぃき.c:16:13: warning: treating Unicode character <U+FF08> as identifier character rather than as '(' symbol [-Wunicode-homoglyph] printf("aboooooooooooooooooooooooooooot") ^~ get_うぃき.c:16:7: error: use of undeclared identifier 'printf(' printf("aboooooooooooooooooooooooooooot") ^ get_うぃき.c:16:49: warning: treating Unicode character <U+FF09> as identifier character rather than as ')' symbol [-Wunicode-homoglyph] printf("aboooooooooooooooooooooooooooot") ^~ get_うぃき.c:20:16: error: implicit declaration of function 'ftell' is invalid in C99 [-Werror,-Wimplicit-function-declaration] while (p = ftell(fp), fgets(line, BUFSIZ, fp)) { ^ get_うぃき.c:20:27: error: implicit declaration of function 'fgets' is invalid in C99 [-Werror,-Wimplicit-function-declaration] while (p = ftell(fp), fgets(line, BUFSIZ, fp)) { ^ get_うぃき.c:20:39: error: use of undeclared identifier 'BUFSIZ' while (p = ftell(fp), fgets(line, BUFSIZ, fp)) { ^ get_うぃき.c:20:47: error: use of undeclared identifier 'fp' while (p = ftell(fp), fgets(line, BUFSIZ, fp)) { ^ get_うぃき.c:20:12: error: use of undeclared identifier 'p' while (p = ftell(fp), fgets(line, BUFSIZ, fp)) { ^ get_うぃき.c:20:22: error: use of undeclared identifier 'fp' while (p = ftell(fp), fgets(line, BUFSIZ, fp)) { ^ get_うぃき.c:22:15: error: use of undeclared identifier 'p' pb[0] = p;//タイトルの始点 ^ get_うぃき.c:25:7: warning: treating Unicode character as whitespace [-Wunicode-whitespace]  pb[3]=p;//タイトルの終点 ^~ get_うぃき.c:26:6: warning: treating Unicode character as whitespace [-Wunicode-whitespace]   pb[2]=p-pb[0];//タイトルのバイト数 ^~ get_tokuhisa.c:25:16: error

  • C#テキストファイルから1バイト除去する

    数ギガのテキストファイルがあり、語尾の1バイト(EOF)を瞬時に除去したいと思います。 バイトで読んで1バイトのみ出力しないと言う方法が一番簡単ですが、時間がかかる上、巨大ファイルには向きません。 下記語尾を置換するソースを書きましたが、除去の方法がわかりません。初心者ですので、簡単にお願いします。 FileStream fs = new FileStream("test.txt", FileMode.Open); byte[] b = new byte[1]; fs.Seek(fs.Length - 1, SeekOrigin.Begin); fs.Write(b, 0, 1); fs.Close();

  • 【C#】テキストファイルを2進数で取得&配列に格納

    http://okwave.jp/qa/q7812279.html 前回の質問が分かりにくかったため、もっと詳しく書いていこうと思います。 テキストファイルを1行ずつ読み取り、それをbyte型に保存したいです。 例:test.txt 01001000 01110000 01010100 11100110 01010101 ↑のような8桁の2進数がテキストファイルに記入されています。 そのテキストファイルを読み取り、 byte配列に格納したいです。 例: byte[0]に01001000 byte[1]に01110000 byte[2]に01010100 byte[3]に11100110 上記のようにデータが格納されるよう、 ファイルを読み取り、配列に入れたいと思っています。 C#初心者のため、右も左も分からないのですが、 とりあえず、やろうとしている流れを以下に書きます。 (1)ファイルを読み込む (2)ArrayListに格納 (3)データ変換(文字列を2進数に) (4)データの出力(byte型) ArrayListでなくても構わないのですが、 他にいい方法が思いつかなかったので…。 言いたいことがぐちゃぐちゃになってきたのでまとめると、 byte[0]にファイルから読み取った1行のデータ(01001011等)を byte型で入力したい。 ということです。 分からなければ、コメントお願い致します。 文章が雑で分かりにくいかもしれませんが、回答頂けると嬉しいです。

  • 【緊急】xmlからデータの取得についての質問です。

    https://okwave.jp/qa/q10016550.html#answers の続きです。 自然言語処理について勉強しています。 Wikipediaのdumpデータからタイトルと本文を抜き出して処理をしようと思ってます。 xmlの処理について試しているのですが、エラーに見舞われて困っています。 プログラミングはあまり得意ではないです。    [やりたいこと] 1.wikipediaのdumpデータからタイトル(<title>~~~</title>の~~~部分)の取得。 2.同じように本文(<text>~</text>の~部分)の抽出 3.それらを処理するプログラム(こちらはできているのでこのプログラムに合わせて本文の内容を取得し、txtファイルにまとめたものが欲しい) これについてのプログラムを作成してますが難航しています。 ポインタについてはあまり得意ではないのでそこら辺の知識がないので困ってます。 ご助力お願いします。 ソースコードです。 =========================== #include <stdio.h> #include <stdlib.h> #include <string.h> int main (){ int p,start,endt,endp,startp; char pb[5]; char line[BUFSIZ]; FILE *fp = fopen("jawiki-20211220-pages-articles-multistream1.xml", "r"); char title[BUFSIZ]; //FILE *gt=fopen("list_1.txt","r"); FILE *fw = fopen("get_text_c.txt", "w"); if ((NULL == fp)||(NULL== fw )){ printf("aboooooooooooooooooooooooooooot"); abort();//終了、ここがうまくいってない? } while (p = ftell(fp), fgets(line, BUFSIZ, fp)) { if (strstr(line, "<title>")){ pb[0] = p;//タイトルの始点 startp=(int)pb[0];//intに変換 } else if (strstr(line, "</title>")){ pb[3]=p;//タイトルの終点 pb[2]=p-pb[0];//タイトルのバイト数 fprintf(fw, "%zu \t %zu \n", pb[2], pb[3]); //pb2とpb3の観察。 fgets(line,pb[2],pb[0]);//タイトルを取得 printf("%s",line);//表示 fprintf(fw,"%s",line);//書き込み } else if (strstr(line, "</page>")){ pb[1] = p - pb[0]; //fwrite(pb, sizeof(size_t), 2, fw); // ... fprintf(fw, "%zu \t %zu \n", pb[0], pb[1]); //... テキスト形式で観察可能 } } fclose(fw); fclose(fp); } ================== これを実行しましたが、出力されるテキストは空で、すぐに終了しています。(dumpデータが重いので時間はかかるはず。) お願いします。

  • C言語のファイル読み込みに関して。

    英文を入力したテキストファイルを読み込むプログラムをつくっているのですが、 ファイル読み込みが上手くできません。 #include<stdio.h> main() { char filename[33]; char sty[512]; FILE *fp; printf("FILENAME: "); fgets(filename, 33, stdin); //読み込むテキストファイルを指定 fp = fopen(filename,"r"); if(fp == NULL){ printf("Can't open the file!\n"); return -1; } fgets(sty, 512, fp); fclose(fp); printf("%s\n",sty); } このプログラムなのですが、どうしても"Can't open the file!"が表示されてしまいます。 どうすればいいのでしょうか?

  • 複数のC言語プログラムが,一つのファイルに書き込み

    2つのプログラムで一つのテキストファイルに書き込むと,エラーが起きてプログラムが停止するんじゃないかなーと思っていましたが,起きませんでした. 検証結果がまた謎であり,知識も足りず,解釈ができないので,力を貸してください. 動作環境は先に言いますと,win7のVC++2010コンパイラです. ---プログラムA FILE *fp = fopen("test.txt", "w"); while(true){ fputc('@', fp); } fclose(fp); ---end ---プログラムB FILE *fp = fopen("test.txt", "w"); while(true){ fputc('_', fp); } fclose(fp); ---end (1)Aを走らせる・・・ファイルには@がたくさん出力されていると思われる. (2)Bを走らせる・・・Aがファイルを操作しているんだから,fopen関数でエラーが出ると思ったが,出なかった.稼働してしまったので,fopenの書き込みモードによってファイルは真っ新になり,「_」が先頭から羅列され始めただろう. (3)Bを停止する・・・「_」の出力は止まっただろうが,プログラムAの方は今何をしているんだろう.元気かな (4)Aを停止する 出力結果すなわちtest.txtの内容は次のようだった. ___________・・・______[NULL][NULL][NULL]・・・[NULL][NULL]@@@@@@@・・・@@@@@@@ これについて質問があります. Q.NULLが出力されているのはどうしてか. Q.AはBが書き込んでいる間,待っていたようだ(Bを停止した後で待ってましたと言わんばかりに@が書き込まれた形跡があるから)が,これは仕様なのか.エラーが出るということを気にする必要はないのか. 余談,予備知識大歓迎です.よろしくお願い致します.

  • 複数テキストファイルを読み込み、複数テキストファイルの出力

    質問は100個のテキストファイル(それぞれ10個のデータを含む)を読み込み、それぞれのテキストファイルから5個ずつデータを抽出し、200個のテキストファイルとして出力するというプログラムについての質問です。 以下が僕の作ったファイル出力部分のプログラムです。 /************/ void ecg_rr(fp,data_max) FILE *fp; { int b,i=0; int c=1; char fname[64]; data[0][i]=trend_data[0][i]; for(i=0;i<100;i++) sprintf(fname,"ss[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][0]); fprintf(fp,"%8.8f\n",data[0][2]); fprintf(fp,"%8.8f\n",data[0][4]); fprintf(fp,"%8.8f\n",data[0][6]); fclose(fp); sprintf(fname,"sk[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][1]); fprintf(fp,"%8.8f\n",data[0][3]); fprintf(fp,"%8.8f\n",data[0][5]); fprintf(fp,"%8.8f\n",data[0][9]); fclose(fp); } 複数ファイルの読み込み方がわからず、自分のプログラムだと1つのテキストファイルしか読み込めないので、16_4.batを作り、その中身を 16_4 読み込むテキストファイル名1.txt ss[1] 16_4 読み込むテキストファイル名1.txt sk[1] 16_4 読み込むテキストファイル名2.txt ss[2] 16_4 読み込むテキストファイル名2.txt sk[2] ・・・ とやったのですが、うまくいきませんでした。 どうすればよいのでしょうか。

  • C言語の質問です。クイズをテキストファイルに書き、それを読み込むという

    C言語の質問です。クイズをテキストファイルに書き、それを読み込むというモノなのですが、その前に前回のスコアを読み込み、棒グラフにして出力しなければいけません。また、問題も1行ずつ読み込み正否を判定します。問題のテキストは、「1,問題文 1.○○ 2,○○ 3.○○」とし、頭に解答を書いています。最後に、正解した数をスコアファイルに書き、終了とします。一応、初めてなら、スコアファイルを新規作成し、2回目ならスコアファイルを開く、というところまでは、出来ましたが、その後がどうにも進みません・・。どなたか教えて頂けないでしょうか・・。 #include <stdio.h> int main(void) { FILE *fp; char str[256]; if((fp = fopen("score.txt","r")) == NULL){  printf("このゲームを初めて実行しますね。\nスコアファイルを新規作成します。\n");  fp = fopen("score.txt","w");  fclose(fp);} else{  printf("スコアファイルを読み込みます。\n");  fp = fopen("score.txt","r");  fclose(fp);} return 0; } 一応ここまでは、出来ています。

  • 「このファイルはSimple Textで・・・」

    ATOK文字一覧をSimple Textに出力したのですが、「このファイルはSimple Textで開くには大きすぎます」の表示がでます。 では、何で開けば良いのでしょうか? このまま別のものから開けますか? あるいは出力しなおすとしたら、Simple Text以外の何に出せば良いのでしょうか?

    • ベストアンサー
    • Mac
  • javaで16進数のバイナリデータ4バイトを10進数に変換する方法

    今私が行なおうとしていることは、char型とbin型が混ざり合ったファイル(1レコード301バイト)から固定バイト部分(bin型の部分4バイト分)を切り取り、 テキストファイルで読み取れる数値(int、又はbouble)に変換・出力するという作業です。 FileInputStreamとDataInputStream.read()を使用し、全データをbyte[]で取得、対象固定バイト部分のbyte[]取得までは出来ました。 取得したbyte[]の値を見ると、16進数表記になっていました。ここで、1バイト分(byte[1])をintValueでintに変換する事はできましたが、 4バイト分(byte[4])の値を一気に10進数表記にしてint型で出力する方法がわかりません。 誰かわかる方はいらっしゃいますか?そもそもできないのでしょうか? またはもっと良い方法があれば教えていただきたいです。 補足としてですが、BufferedReaderでファイルを読込まなかったのは、bin型データ部分がたまたま改行コードになってしまうことがあり、readLine()で1行データ(301バイト分)を取得できないからです。 こちらの方法でも読込み・変換できるのでしょうか? 誰かわかる方がいらっしゃったらぜひ教えて下さい!

    • ベストアンサー
    • Java