
大量の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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語:数値の桁数指定についての質問です。 8 2022/05/26 23:53
- 哲学 日本語は 言語類型として あたかも始原のごとくである 3 2022/05/29 04:41
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- その他(プログラミング・Web制作) プログラミング 処理速度 1 2022/11/25 11:05
- その他(プログラミング・Web制作) awkの文字列比較はPOSIXロケールまたはCロケールにおいてバイナリ値の比較に使えるか gawkな 1 2023/04/22 09:21
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語について質問です。 以下のような結果を出すためにはどのようなコードが良いですか?サンプルコード 3 2022/11/01 16:19
- その他(社会・学校・職場) 平均的日本人の頭は悪くはないはずですし、学校で習う内容が幼稚というわけでもないのに、世間には幼稚な大 7 2023/04/05 20:51
- IT・エンジニアリング FORTRAN、COBOL、C、Java、C++とか誰が作ったのですか?言語習い使いまた出て、キリが 4 2023/05/06 23:11
- 教えて!goo 質問サイトで読解力がない奴と話すとイライラします。こういう人の対処法を教えてください。 22 2022/09/12 08:44
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
小数点を含む数値かどうか判断...
-
win10で、正確な待ち時間の作り方
-
Excel VBAにて、2GB超の点群デ...
-
Excelでのセル内容の高速消去方法
-
VBでの簡易電卓の作成(減算方...
-
【C言語 数独】 C言語で9×9の数...
-
実行時のCPU使用率を増やしたい
-
Excel VBA データ削除の高速化
-
絶対パスの取得について
-
散布図グラフの近似線追加後に...
-
ナップザック問題?をエクセル...
-
OSSemCreate関数に引数”1”と入...
-
.netからexcel操作の処理速度が...
-
WindowsMessage(ウィンドウメッ...
-
DoEvents関数って何?
-
基本情報技術者試験詳しい方へ...
-
SQLの速度をあげるには・・・
-
テキスト処理の速度の速い言語
-
見やすい・メンテしやすいプロ...
-
C言語:関数を使うメリットとデ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelでのセル内容の高速消去方法
-
win10で、正確な待ち時間の作り方
-
Excel VBAにて、2GB超の点群デ...
-
小数点を含む数値かどうか判断...
-
あっち向いてホイのプログラム...
-
プログラム上のCPU稼働率低減に...
-
DoEvents関数って何?
-
SQLの速度をあげるには・・・
-
テキストファイルの空行をスキ...
-
Excel VBA データ削除の高速化
-
ナップザック問題?をエクセル...
-
If Not c Is Nothing Then ~延...
-
絶対パスの取得について
-
ノットイコールを教えて下さい
-
符号付きにすべきか、符号なし...
-
実行時のCPU使用率を増やしたい
-
基本情報技術者試験詳しい方へ...
-
Excel(VBA)でSetTimer関数を使...
-
VC++2010 GDIオブジェクトの解...
-
テキスト処理の速度の速い言語
おすすめ情報
今回の場合は、ヒントとかと言うのはどうしても長い説明にならざるを
得ません。ですから、ここではコードでのサンプルを提示願います。
そうでないと聞き取りミス、説明不足などと言う注意ミスの発生も有り
かなりにそれなりの理解に対するコストが増えます。そんな所での苦労
は避けたい物です。
ですから、ここでは直接のコードと言うのを要求しています。具体的に解説
をされても何一つとしてそこにコードが無い物は、理解が難しいと言う事を
ここでは回答をされる万は理解をして下さる様切にお願いします。
宜しくお願いします。質問をされる方へ幾ら質問をしても何度も質問をされる
方の私は、どう答えれば良いのか苦慮します。回答者の回答者なりの範囲で回答
をお願いします。私ならば、この様に作リますとか。
それで良いです。兎に角、ここではコードが無い様では先に話が進みません。
宜しくお願いします。
取り敢えずは、最初の一歩としては先ずはファイルの出力から。下記の
内容です。これに、タグを見つけて条件を付けてからの出力となりま
す。
#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;
}
未だ勉強を始めたばかりで、この質問以前の段階ですので
再度質問を改めて提出します。
一旦、これは閉じます。