大量のhtmlファイルを処理をする様になってから今迄はperlを使って来
たが処理が遅いのでC言語を使って早くしようと思って要るが。肝心の
日本語コードの扱いで詰まっている。
例えば、
<!--コメントヘッダーのはじまり-->
.
.
.
<!--コメントヘッダーのおわり-->
と言った場合に、<と>に囲まれた色んなタグが現れて来る。strtokで文
字列を拾って対処をするとしても、文字コードが処理出来なければ何も
進まない。
例えば、上記の場合でhtmlファイルを読んでコメントヘッダーのはじまり
とおわり迄に関しては、出力をしない。他のは全て出力すると言う様な場
合のC言語のソースはどの様に成るのでしょうか。
済みません。未だ、始めたばかりでC言語での記述が出来ません。宜し
く回答願います。
回答はヒントでは無くて直接のC言語のソースを提示願います。宜しく
お願いします。
No.1ベストアンサー
- 回答日時:
>回答はヒントでは無くて直接のC言語のソースを提示願います。
これがほしければ、もうちょっと具体的な入出力についての説明が必要です。
ヒントレベルになりますが、状態変数を使って、
状態1:コメント外・・・strstr()などを使って"<!--"を探し、そこまでを出力→状態2へ
状態2:コメント内・・・strstr()などを使って"-->"を探し、その一つ右へポインタを進める→状態1へ
これをHTMLの最後まで繰り返します。
ファイルの中身をすべていったんメモリに持つなら'\0'を見つけるまで繰り返すだけです。限られたバッファでやりくりしようとするなら(ネットワークからダウンロードしながら処理する際にはこのやり方が必須)、バッファ読み込みの際のタグ文字列の泣き別れなどを考慮する必要がありちょっと凝ったテクニックが必要になります。
それとも、UTF-8で書かれたHTMLの"<!--コメントヘッダーのはじまり-->"~"<!--コメントヘッダーのおわり-->"を全削除ですか?だったら、コードをUTF-8で書いて、strstr()で"<!--コメントヘッダーのはじまり-->”を見つけて・・・でいけると思います。文字コードの処理というよりか、見る人が見れば日本語に見えるかもしれない「ただのデータの列」とみなして処理するだけです。
有難う御座います。
折角回答頂きましたが。具体的に理解を得る事は難しいです。私が回答
者ならば、ここではそんな紛らわしい回答はしませんが。
ここではきちんとした正解を得るのが目的では無くて、ざっくりとした
概要を知るのが目的ですから。ですから、抽象的な回答では前には進め
ません。
何でも良いので、動くので有れば。動くので有れば私なりに理解が出来
る範囲で理解に努めます。然し、何も無い様で有れば何も理解にはなり
ません。確かに、ヒントで書かれている内容は理解は出来ます。
何もそんな難しいどの様な状況下でも動くコードを求めている訳では有
りません。これを実現する方法は人に依って多種多様です。その全ての
回答を列挙してその全ての解説なんかを求めている訳では有りません。
何でも良いのです。動きさえすれば。何でも良いのでサンプルが知りた
かったと言うのが趣旨です。やり方としては。
① strstrを使って、<を探す。
② !--のコメントタグなのかをチェックする
③ コメントタグならば、コメントの内容がコメントヘッダーのはじま
りか、若しくはコメントヘッダーのおわりかをチェックする。
④ 該当が有れば、次のタグが-->なのかをチェックする
⑤ 若しもそこでも該当すれば、出力非表示のフラグをセットする。
⑥ 次のデータを読んで、終わりの今度はまた、終了タグの<をチェッ
クする。
⑦ <が見つかると、次のコメントヘッダーのおわりを探す。
⑧ それが見つかると、終了タグの-->を探す
⑨ 終了タグ迄見つかると、出力非表示のフラグをリセットする
⑩ 次からは通常の出力モードに移行する
⑪ この動作を入力が無くなる迄繰り返す。
と言う様なダラダラとした長い説明になります。また、これではどうし
ても説明が理解を得る事が難しくなります。だから、百聞は一見に如か
ずで直接のコードでの回答が理解がしやすのです。
この様な説明をしても聞いている方が効率良く理解をするとは到底思えま
せん。だから、私はコードでの回答をお願いしますと言ったのです。
私なら、若しも私が知っていると言うので有ればここではさっさとコー
ドを提示します。それが親切と言う物です。幾ら例え回答をしても質問
をされている方が理解が得られ難い様で有れば、それは回答をしたとし
ても質問者の意に反します
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VisualBasic6でPerlの正規表現...
-
Excelでのセル内容の高速消去方法
-
If Not c Is Nothing Then ~延...
-
Macターミナルで実行中のプログ...
-
家電製品の電力周波数を変える機械
-
アセンブラ言語の数字を数値に...
-
スーパーのレジで並んでいたら...
-
緯度、経度の 10進法と 60進法...
-
Mac 乗数の入力方法
-
バックグラウンドのプロセスの...
-
怪しいプロセス教えてください。
-
C言語で、メモリを解放しないで...
-
VBSからbat実行(WMI)して戻り値...
-
VBAを使って二進法計算
-
Trend Micro Anti-Malware Solu...
-
フレームワーク「4.8.1」で、[S...
-
pthread_attr_tへの値の代入に...
-
組み込みマイコンでのソフトウ...
-
C/C++→JAVAに変換するツール
-
スーパーのレジ待ち
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
win10で、正確な待ち時間の作り方
-
Excelでのセル内容の高速消去方法
-
DoEvents関数って何?
-
小数点を含む数値かどうか判断...
-
絶対パスの取得について
-
プログラム上のCPU稼働率低減に...
-
SQLの速度をあげるには・・・
-
プログラミングの授業でPython...
-
If Not c Is Nothing Then ~延...
-
ナップザック問題?をエクセル...
-
ノットイコールを教えて下さい
-
テキストファイルの空行をスキ...
-
実行時のCPU使用率を増やしたい
-
あっち向いてホイのプログラム...
-
Excel(VBA)でSetTimer関数を使...
-
基本情報技術者試験詳しい方へ...
-
VBでの簡易電卓の作成(減算方...
-
キャッシュを意識したプログラ...
-
再帰処理について
-
Excel VBAにて、2GB超の点群デ...
おすすめ情報
今回の場合は、ヒントとかと言うのはどうしても長い説明にならざるを
得ません。ですから、ここではコードでのサンプルを提示願います。
そうでないと聞き取りミス、説明不足などと言う注意ミスの発生も有り
かなりにそれなりの理解に対するコストが増えます。そんな所での苦労
は避けたい物です。
ですから、ここでは直接のコードと言うのを要求しています。具体的に解説
をされても何一つとしてそこにコードが無い物は、理解が難しいと言う事を
ここでは回答をされる万は理解をして下さる様切にお願いします。
宜しくお願いします。質問をされる方へ幾ら質問をしても何度も質問をされる
方の私は、どう答えれば良いのか苦慮します。回答者の回答者なりの範囲で回答
をお願いします。私ならば、この様に作リますとか。
それで良いです。兎に角、ここではコードが無い様では先に話が進みません。
宜しくお願いします。
取り敢えずは、最初の一歩としては先ずはファイルの出力から。下記の
内容です。これに、タグを見つけて条件を付けてからの出力となりま
す。
#include <stdio.h>
#include <stdlib.h>
int main() {
int getf;
FILE *fp;
fp = fopen("01.txt" , "r");
if (fp == NULL) {
printf("ファイルが開けませんでした");
exit (1);
}
while(1) {
getf = fgetc(fp);
if (getf == EOF) break;
printf("%c" , getf);
}
fclose(fp);
return 0;
}
未だ勉強を始めたばかりで、この質問以前の段階ですので
再度質問を改めて提出します。
一旦、これは閉じます。