プログラムが作動しない
コマンドプロンプトで実行して
”ファイル名は?”
と聞いてきてテキストファイルのフルパス(場所)を入力してエンターキーで次は
”作成先は?”
と聞いてきてフルパス(場所)を入力してエンターキーで終わり、
英文のかかれたテキストファイルから全英単語を重複なく順番に新しいテキストファイル(以下、”NEWテキスト”と呼ぶ)に書き込み保存するプログラミングです。
実際の内容の結果は次のようになる。
-------------------英文.txt-------------------------------
I was wondering if my plant needs friends, do I need to get more of the same plant so it can get polinated and produce peppers?
------------------new英文.txt(プログラムによって新規作成)------------------------------
I
was
wondering
if
my
plant
needs
friends
do
need
to
get
more
of
the
same
so
it
can
polinated
and
produce
peppers
-------------------------------------------------
ポイント
(1)
NEWテキストの重複チェックは同じ単語でも大文字と小文字ひとつでも違えば書き込みはOKとする(プログラムが楽なよう)
例)Apple と apple
では違うものとしNEWテキストに書き込みされる。また同じ単語でも記号が含まれていても違う単語と判断し、記号付きのままNEWテキストに書き込む。
例)get! と get
つまり小文字、大文字を区別して一致し、さらに文字数も一致しないと重複とみなされない。
(2)
Windowsで動作すること。NEWテキストのファイル名は毎回入力しないでいいように、英文のテキストファイルのファイル名の先頭に"new" をつけたものでいい。
例)英文.txt → new英文.txt
このプログラムはつぎのようになります
------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct tag_list_t{
int num;
char **wordlist;
}list_t;
int list_add(list_t *list, char *word){
int i;
for(i=0;i<list->num;i++)
if(strcmp(list->wordlist[i], word)==0) return 0;
list->wordlist=realloc(list->wordlist, sizeof(char*)*(list->num+1));
list->wordlist[list->num]=strdup(word);
list->num+=1;
return 1;
}
int main(void){
list_t list={0, NULL};
char fname_in[FILENAME_MAX], fname_out[FILENAME_MAX], word[1000+1];
char *find;
FILE *fp_in, *fp_out;
printf("”ファイル名は?”");
fgets( fname_in, FILENAME_MAX, stdin );
printf("”作成先は?”");
fgets( fname_out, FILENAME_MAX, stdin );
if ( (find = strchr(fname_in,'\n')) != NULL ) *find = '\0';
if ( (find = strchr(fname_out,'\n')) != NULL ) *find = '\0';
if((fp_in=fopen(fname_in, "r"))==NULL) return 1;
if((fp_out=fopen(fname_out, "w"))==NULL) return 2;
while(fscanf(fp_in, "%1000[A-Za-z]%*[^A-Za-z]", word)==1) if(list_add(&list, word)) fprintf(fp_out, "%s\n", word);
fclose(fp_in);
fclose(fp_out);
return 0;
}
-----------------------------------------------
アルクの1から12
http://www.alc.co.jp/goi/svl_ichiran1.htm
を全部まとめたテキスト(約12000行)
をプログラムにかけると白紙でできあがります。
なぜかわかりますか?改善方法おしえてください。
補足
それをうつと、「cannot open source file config-train」と出ます。config train は、share という共有ファイルの中に入っていて、いつもはこのshare のディレクトリの中で作業を行なっています。このshare の中に、path/to/mfccのディレクトリを入れると、cannot open Parm file /path/to/mfcc/a1.mfcが出てきます。