質問編集履歴

2

タグ修正

2022/06/26 08:36

投稿

studyprg
studyprg

スコア57

test CHANGED
File without changes
test CHANGED
File without changes

1

実行結果とソースを追記

2022/06/26 08:35

投稿

studyprg
studyprg

スコア57

test CHANGED
File without changes
test CHANGED
@@ -76,3 +76,124 @@
76
76
 
77
77
  出力結果は何も表示されてないようです.急ぎです.お願いします.
78
78
 
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+ ### 追記:6/2618:00
91
+ 修正依頼にあったように処理の前にprintfを追加してみたバージョンのソースと実行結果を載せておきます.
92
+
93
+ おそらく/titleの処理を忘れているのではないかなと思います.
94
+
95
+ ```ここに言語を入力
96
+ #include <stdio.h>
97
+ #include <stdlib.h>
98
+ #include <string.h>
99
+ #define SIZE 256 * 1024 * 1024
100
+
101
+ int main()
102
+ {
103
+
104
+ int p, pb[6];
105
+ char *line = malloc(SIZE);
106
+ char *title;
107
+ char *id;
108
+ FILE *fp = fopen("jawiki-20211220-pages-articles-multistream2.xml", "r");
109
+ FILE *fw = fopen("getX.txt", "w"); //記入先
110
+ if ((NULL == fp) || (NULL == fw))
111
+ abort();
112
+ while (p = ftell(fp), fgets(line, SIZE, fp))
113
+ {
114
+
115
+ /*
116
+ // textやpageなどの複数行にわたるとき
117
+ if (strstr(line, "<text"))
118
+ {//属性があるため<text
119
+ pb[0] = p;
120
+ }
121
+
122
+ if (strstr(line, "</text>"))
123
+ {
124
+ pb[1] = p - pb[0];
125
+
126
+ printf("%d\t%d\n", pb[0], pb[1]);
127
+ fprintf(fw, "%d\t%d\n", pb[0], pb[1]);
128
+ }
129
+ */
130
+
131
+ if (strstr(line, "<title>"))
132
+ {
133
+ printf("title in\t 1\n");
134
+ pb[0] = p;
135
+ if ((strstr(line, "</title>")))
136
+ {
137
+ printf("/title in\t1\n");
138
+ pb[1] = p - pb[0];
139
+ pb[0] += strlen("<title>");
140
+ fseek(fp, pb[0], SEEK_SET);
141
+ fgets(title, pb[1], fp);
142
+ printf("%s\n", title);
143
+ if (strstr(line, "<title>"))
144
+ {
145
+ printf("title\tin\t22222222222\n");
146
+ pb[2] = p;
147
+ if (strstr(line, "<id>"))
148
+ {
149
+ printf("id in\t\n");
150
+ pb[2] = p;
151
+ if (strstr(line, "</id>"))
152
+ {
153
+ printf("/id in \n");
154
+ pb[3] = p - pb[2];
155
+ pb[2] += strlen("<id>");
156
+ fseek(fp, pb[2], SEEK_SET);
157
+ fgets(id, pb[3], fp);
158
+ printf("title=\t%s\nid=\t%s\n", title, id);
159
+ if (strstr(line, "<text"))
160
+ {
161
+ printf("text in ");
162
+ pb[4] = p;
163
+ if (strstr(line, "</text>"))
164
+ {
165
+
166
+ printf("/text in ");
167
+ pb[5] = p - pb[4];
168
+ printf("%s\t%s\t%d\t%d\n", title, id, pb[4], pb[5]);
169
+ }
170
+ }
171
+ }
172
+ }
173
+ }
174
+ }
175
+ }
176
+ }
177
+
178
+ printf("process ok");
179
+ free(line);
180
+ fclose(fw);
181
+ fclose(fp);
182
+ }
183
+ ```
184
+ 以下実行結果の一部です.
185
+ ```ここに言語を入力
186
+ title in 22222222222
187
+ title in 1/title in 2(null)
188
+ title in 22222222222
189
+ title in 1/title in 2(null)
190
+ title in 22222222222
191
+ title in 1/title in 2(null)
192
+ title in 22222222222
193
+ title in 1/title in 2(null)
194
+ title in 22222222222
195
+ title in 1/title in 2(null)
196
+ title in 22222222222
197
+ process ok
198
+ ```
199
+ 処理のバランスおかしいですね.