質問編集履歴

1

追加

2022/06/13 14:39

投稿

studyprg
studyprg

スコア57

test CHANGED
File without changes
test CHANGED
@@ -140,6 +140,73 @@
140
140
  }
141
141
 
142
142
  ```
143
+ **追記:実行はできましたがidが表示されてません.**
144
+ ```wiki_getter3_title.c(更新版)
145
+ #include <stdio.h>
146
+ #include <stdlib.h>
147
+ #include <string.h>
148
+
149
+ int main()
150
+ {
151
+
152
+ size_t p, pb[3];
153
+ char line[BUFSIZ];
154
+ char title[BUFSIZ];
155
+ char idnum[BUFSIZ];
156
+ FILE *fp = fopen("jawiki-20211220-pages-articles-multistream2.xml", "r");
157
+ FILE *fw = fopen("get_text_byte3_title_and_id.txt", "w");
158
+ if ((NULL == fp) || (NULL == fw))
159
+ abort();
160
+ while (p = ftell(fp), fgets(line, BUFSIZ, fp))
161
+ {
162
+ /*
163
+ if (strstr(line, "<page> "))
164
+ pb[0] = p;
165
+ else if (strstr(line, "</page>"))
166
+ {
167
+ pb[1] = p - pb[0];
168
+ printf("%zu\t%zu\n", pb[0], pb[1]);
169
+ fprintf(fw, "%zu\t%zu\n", pb[0], pb[1]); // ...
170
+ // fprintf(fw, "%d\t%d\n", pb[0], pb[1]); ... テキスト形式で観察可能
171
+ */
172
+ char *p1, *p2;
173
+ p1 = strstr(line, "<title>");
174
+ p2 = strstr(line, "</title>");
175
+
176
+ if (p1 && p2)
177
+ { // 1行に両方見つかった
178
+ p1 += strlen("<title>"); // <title>の次の位置
179
+ int len = p2 - p1;
180
+ int nowp = atoi(p1);
181
+ if (len >= 0)
182
+ {
183
+ memcpy(title, p1, len); //出力 
184
+ title[len] = '\0'; // 終端記号を忘れずに追加
185
+ }
186
+ }
187
+ else
188
+ {
189
+ char *p3, *p4;
190
+ p3 = strstr(line, "<id>");
191
+ p4 = strstr(line, "</id>");
192
+ if (p3 && p4)
193
+ {
194
+ p3 += strlen("<id>"); // <id>の次の位置
195
+ int len = p4 - p3;
196
+ if (len >= 0)
197
+ {
198
+ memcpy(idnum, p3, len); //出力 
199
+ idnum[len] = '\0'; // 終端記号を忘れずに追加
200
+ }
201
+ printf("title:%s\tID:%s\n", title, idnum);
202
+ fprintf(fw, "%s\t%s\n", line, idnum);
203
+ }
204
+ }
205
+ }
206
+ fclose(fw);
207
+ fclose(fp);
208
+ }
209
+ ```
143
210
  エラーについて.
144
211
  ---
145
212
  タイトルは取得できましたが,idnumが表示されてないです.
@@ -147,13 +214,8 @@
147
214
 
148
215
  最後の方を表示
149
216
 
150
- title is 島田洋七(ID:).
217
+
151
- title is 大砂土村(ID:).
218
+
152
- title is J級潜水艦 (イギリス海軍)(ID:).
153
- title is ランカウイ島(ID:).
154
- title is 外山雄三(ID:).
155
- title is 工藤順子(ID:).
156
- process ok
157
219
  ```
158
220
  ~~ループの終了位置をミスしているのかな?~~
159
221
  idnumが空っぽいですね.