![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
以下(abc.c)はあるサイトの「単語数のカウント」のソースコードを変更したものです。コマンドプロンプトで gcc abc として実行してもカウントができません。どこが問題でしょうか
int main(int argc, char *argv[])
{
FILE *fp;
char buff[1024];
unsigned char
*wp;
int num;
unsigned long
word ;
argv[1] = "check.txt";
fp = fopen(argv[1], "r");
word = 0;
while((num = fread(buff, 1, 1024, fp))>0){
for(wp = buff; num>0; num--,wp++){
if(*wp <= '\0'){
word++;
}
}
}
printf("%71d %s\n", word, argv[1]);
fclose(fp);
}
A 回答 (17件中1~10件)
- 最新から表示
- 回答順に表示
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?8acaa2e)
No.17
- 回答日時:
□□abc□□xyz
においてaはmode=0ですか。でもaは単語の一部で単語の内部ですね。
□は空白の意味です。
最初はmode=0で開始します。
□を検知するとmode=0にしています。なので、aを検知した時はmode=0です。
aを検知した時は、
}else{
//上記以外の文字の場合
//モードが単語外なら、単語内に設定し、単語数をカウントアップ
if (mode == 0){
mode = 1;
word++;
}
}
が実行されます。
mode=0なので
if (mode == 0){
mode = 1;
word++;
}
を実行します。
つまり、modeを1に切り替えます。(単語内に入った状態にします)
そして、単語数をカウントアップします。
「単語外なら、単語内に設定し」これもわかりません
「modeが単語外なら、modeを単語内に設定し」の意味です。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?8acaa2e)
No.16
- 回答日時:
>ふと思い出したのですが、mode とありますが、これはどういう意味でしょうか
ソースのコメント通りの意味です。
int mode = 0; //0:単語の外にある状態 1:単語の内にある状態
1文字ずつ処理するので、「空白、タブ、改行」以外を単語構成文字とします。(ここでは単語の定義をそのように定義します)
□□abc□□xyz
を処理する時、aを検出した時に単語数のカウントアップをします。(b,cはカウントアップしない)
同様にxを検出した時に単語数のカウントアップをします。(y,zはカウントアップしない)
これは、mode=0で「空白、タブ、改行」を検出した時です。
b,cはmode=1で「空白、タブ、改行」を検出した時です。
なんかよくわからないのですが
□□abc□□xyz
においてaはmode=0ですか。でもaは単語の一部で単語の内部ですね。
//モードが単語外なら、単語内に設定し、単語数をカウントアップ
if (mode == 0){
mode = 1;
word++;
「単語外なら、単語内に設定し」これもわかりません
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?8acaa2e)
No.15
- 回答日時:
>調べてみると「phpでワードファイルを出力する」ということです。
テキストがほしいのですが下記のサイトにPHPでwordをテキストファイルに変換するライブラリが提供されています。
https://www.phpclasses.org/package/7934-PHP-Conv …
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?8acaa2e)
No.14
- 回答日時:
No13です。
PHPwordはテキストファイル→DOC(DOCX)ファイルの変換で、その逆はないかもしれません。
DOC(DOCX)からテキストファイルへの変換例が(linuxですが)下記のサイトにあります。
http://engineer-milione.com/tips/word-text.html
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?8acaa2e)
No.13
- 回答日時:
>ならば例のサイトはどのようにしているのだろうかと疑問に思います。
>まさか待機していてアプロードされたファイルを人力で変換するようなことはないでしょうが。でもそれしか考えられません。
一例ですがPHPwordのようなものを使用されているのではないでしょうか。
https://qiita.com/satthi/items/761f7d956e2e9ca76 …
PHPwordはライブラリですが、その「変換機能の核」の部分はC言語かC#で作成されていると思います。
PHPwordについてはちらっと聞いたことがあります。
調べてみると「phpでワードファイルを出力する」ということです。テキストがほしいのですが
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?8acaa2e)
No.12
- 回答日時:
>自動又はファイルコンバータを使用するにせよ、プログラムが必要になると思いますが、それはPHP又はC言語でしょうか
そのサイトがphpで作られている前提ですが、
その場合は、そのプログラムはphpです。但し、phpはそのコンバータを呼び出しているだけです。(又は変換機能を使用しているだけ)
少なくともphpの命令のみでwordを読み込み、テキストファイルへの変換を行うのは無謀かと。
コンバータ自体(若しくは変換機能自体)は、想像ですがC言語もしくはC#で作られているかと思います。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?8acaa2e)
No.11
- 回答日時:
No10です。
doc,docxをテキストファイルに変換するプログラムをC言語で作成するには、
doc,docxの正確なフォーマットを知らなければなりません。もし、単純に"abc"という文字のみを書いたものを
doc,docxに保存した場合でも、その文字の色、サイズ、フォントの種類、wordのバージョン、作成者等の情報が
そのファイルには含まれているはずです。それをすべて取り除いて、"abc"のみを抽出する必要があります。
又、doc,docxのフォーマットをマイクロソフトは一般に公開していません。(私が知らないだけかも知れませんが・・・)
もし、そのフォーマットを入手できたとしても、そのプログラムを完成させるのは非常に多くの労力を必要とします。
すくなくとも、このサイトでソースを提示できる程度の作業量ではありません。
ならば例のサイトはどのようにしているのだろうかと疑問に思います。
まさか待機していてアプロードされたファイルを人力で変換するようなことはないでしょうが。でもそれしか考えられません。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?8acaa2e)
No.10
- 回答日時:
>ところで、あるサイトでファイルをアップロードして単語数を表示するというのがありました。
>テキスト、.doc,.docxが可能だったと思います。これはどういうようにしたのでしょうか
たぶん、想像ですが、doc,docxを一旦テキストファイルに変換してから、単語数をカウントしたのではないでしょうか。
手動でdoc,docxをテキストファイルに変換する場合は、wordを起動して、「名前を付けて保存」を行い、書式なし(*.txt)
を選択すると、テキストファイルに変換できます。このような作業を自動でおこなうか、ファイルコンバータのようなものを
使用していると考えられます。
以下はファイルコンバーターの一例です。
https://www.gigafree.net/tool/office/MwisoftWord …
>このような作業を自動でおこなうか、ファイルコンバータのようなものを
使用している
自動又はファイルコンバータを使用するにせよ、プログラムが必要になると思いますが、それはPHP又はC言語でしょうか
No.9
- 回答日時:
.doc,.docxのファイルについて
対象となるファイルをメモ帳から開いてみましょう。
メモ帳を起動し、ファイルを開く、からファイルの種類の全てのファイルに変えるとメモ帳で.docファイルを読めます。
多分、とんでもない文書(ともいえないような何か)が表示されるでしょう。
質問者のプログラムはこのようなとんでもないデータを読み込んでいるのです。
こんなファイルの単語のカウントができるでしょうか?
>こんなファイルの単語のカウントができるでしょうか?
無理だということですね。
ところで、あるサイトでファイルをアップロードして単語数を表示するというのがありました。テキスト、.doc,.docxが可能だったと思います。これはどういうようにしたのでしょうか
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?8acaa2e)
No.8
- 回答日時:
>ありがとうございました。
txt, docの場合はできました。>ところでargv[1] = "check.docx" (同じ文章)の場合はカウントできないようですが
docでできたのはたまたまです。
このプログラムはテキストファイルだけしか対応していません。
従って、docxには対応していません。(xlsxとかxlsとかもできません。)
docxはMirosoft独自のWord専用のフォーマットで書かれています。それをテキストファイルのように扱うことはできません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ATTファイルってどうやって開け...
-
テキストファイルの一部分を抽...
-
テキストファイル内容の、16進...
-
VBSでテキストファイルの2行目...
-
既存のテキストファイルを開く方法
-
StreamReaderで読み込んだファ...
-
VB(VBA)で、バイナリデータを使...
-
WORDのVBAで差し込み印刷時、デ...
-
エクセルVBAでメールの自動作成...
-
テキストファイルの特定行の削...
-
バイナリファイルの区別
-
ファイル変換
-
EUC-JP版とUTF-8版の違い
-
コーディングについて。
-
テキストファイル固定長データ...
-
別のサーバーのテキストファイ...
-
C#テキストファイルから1バイト...
-
バイナリファイルをテキストに変換
-
ASP.NET Web上のテキストファ...
-
UTF-8とASCIIコードにおける互...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ATTファイルってどうやって開け...
-
VBSでテキストファイルの2行目...
-
テキストファイルの一部分を抽...
-
既存のテキストファイルを開く方法
-
Excel VBAが徐々に遅くなる
-
テキストファイルの特定行の削...
-
Windowsのメモ帳でUTF-8を選択...
-
テキストファイル内容の、16進...
-
VB(VBA)で、バイナリデータを使...
-
エクセルVBAでメールの自動作成...
-
VBA。開いているテキストファイ...
-
[VB.NET] 処理の高速化を行いた...
-
ASP.NET Web上のテキストファ...
-
フォーム無しでアプリを作成す...
-
テキストファイル固定長データ...
-
ファイルのチェックサムを改行...
-
文字コードの変換(JISコードへ)
-
UTF-8とASCIIコードにおける互...
-
C言語でテキストファイルをバイ...
-
テキストファイルをSQLServerデ...
おすすめ情報
先ほどの補足でカウントできないとは、8単語ではなく1単語になりました。