質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

解決済

xmlの処理がうまくいかず.出力結果が表示されない.

studyprg
studyprg

総合スコア41

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

2回答

0評価

0クリップ

160閲覧

投稿2022/06/16 06:00

編集2022/06/19 17:50

自然言語処理について勉強しています。
Wikipediaのdumpデータ(xml)から本文を抜き出して処理をしようと思ってます。
xmlの処理について試しているのですが、出力結果が出なくて困っています。
欲しい出力は3つです.
1,,<text></text>の開始ポイントとバイト数.
2.<title></title>の開始ポイントとバイト数.
3.<id></id>の開始ポイントとバイト数.
コンパイルは通りますが,実行しても秒で終了し,何も出力されません.
プログラミングはあまり得意ではないです。

以下にソースコードを貼り付けます。

wiki_getter1_byte.c

#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { size_t p, pb[3]; char line[BUFSIZ]; char title[BUFSIZ]; char idnum[BUFSIZ]; char startw[] = "<text";//ここと一つ下ををtitleやidに変えて実行したい char endw[] = "</text>"; char nextw[] = "</page>"; char *readfilename = "jawiki-20211220-pages-articles-multistream2.xml"; //読み込むファイル char *writefilename = "wiki_byte1.txt"; //書き込むファイル FILE *fp = fopen(readfilename, "r"); FILE *fw = fopen(writefilename, "w"); if ((NULL == fp) || (NULL == fw)) abort(); else{ printf("ファイル開きます"); } while (p = ftell(fp), fgets(line, BUFSIZ, fp)) { if (strstr(line, startw)) pb[0] = p; else if (strstr(line, endw)) { pb[1] = p - pb[0]; printf("%zu\t%zu\n", pb[0], pb[1]);//欲しい出力 strstr(line, nextw);//revisionの下の<id>を読み込まないため // fprintf(fw, "%zu\t%zu\n", pb[0], pb[1]); // ...書き込み用, // fprintf(fw, "%d\t%d\n", pb[0], pb[1]); ... } fclose(fw); fclose(fp); } }

実行時はファイル読み込みは出ているようです.
欲しい部分の理解用にwikiのxmlファイルの一例を示します.

<page> <title>鳥取砂丘</title> <ns>0</ns> <id>19812</id> <revision> <id>53717095</id> <parentid>53211643</parentid> <timestamp>2014-12-06T03:46:16Z</timestamp> <contributor> <ip>58.156.158.18</ip> </contributor> <comment>/* 砂丘の利用と周辺住民とのかかわり */</comment> <model>wikitext</model> <format>text/x-wiki</format> <text xml:space="preserve">{{Coord|35|32|27.821|N|134|13|41.789|E|region:JP|display=title}} [[ファイル:Tottori-Sakyu Tottori Japan.JPG|thumb|300px|馬の背]] {{mapplot|134.2290|35.5407|鳥取砂丘}} '''鳥取砂丘'''(とっとりさきゅう)は、[[鳥取県]][[鳥取市]]の[[日本海]]海岸に広がる広大な砂礫地で、代表的な[[海岸砂丘]]。日本三大砂丘の1つである&lt;ref&gt;その他の2つについては、諸説ある。&lt;/ref&gt;。[[山陰海岸国立公園]]の特別保護地区に指定されており、南北2.4km、東西16kmに広がる日本最大の観光可能な[[砂丘]]である。(一般に立ち入れない物も含めると、日本最大の砂丘は&lt;!--(内陸にある砂丘を含めると--&gt;[[青森県]]の[[猿ヶ森砂丘]])。&lt;!--内陸砂丘は大陸内部の砂丘を示し、日本には内陸砂丘なないため編集しました--&gt; <中略> [[Category:日本の海岸景勝地]] [[Category:砂丘]] [[Category:平成百景]] [[Category:日本の地質百選]]</text> <sha1>axvz6j2vrmxe3n68ssg11m0w8qtcobn</sha1> </revision> </page>

追記:現在のソースを追記しておきます.

Wiki_parser1_Byte.c

#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"); // printf(fw,"startbyte\t記事のbyte \n"); 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]; // fprintf(fw, "%zu\t%zu\n", pb[0], pb[1]); // ... // fprintf(fw, "%d\t%d\n", pb[0], pb[1]); ... テキスト形式で観察可能 } printf("%zu\t%zu\n", pb[0], pb[1]); } } printf("process ok"); free(line); fclose(fw); fclose(fp); }

現在の出力も載せておきます.

1536124776 0 1536146103 0 1536146845 0 1536147939 0 1536153955 0 1536159921 0 1536174339 0 1536177008 0 1536181947 0 1536187730 0 1536188261 0 1536205531 0 1536286862 0 1536292238 0 1536295216 0 1536302579 0 1536318555 0 process ok

処理自体は動いていますがバイト数が常に0です.

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

studyprg

2022/06/16 07:47

一応ファイルは開いてるようです. その後すぐに処理が停止しているようです.
studyprg

2022/06/17 07:56

pb[1]=p-pb[0]を pb[1]=pとして観察しましたが既に記入していたものと同じくpb[1]は0でした.

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。