ファイル読み込み
ファイル読み込み
ちょっと教えていただきたいんやけどよろしいか??
ほな質問させていただきますよって。
下記のソースコードを見てほしいんやけど。。
今の段階でファイルの中身が
EKI="KANE"-"SAM"
KANE="SAM"%"EKI" だとします。これを読み込んで.hファイルに書き込んだ場合
#define KANE 0
#define SAM 0
#define EKI 0
#define EKI 0
#define KANE 0 となります。これを重複したものに関しては2度書き込まないようにしたいんやけど。。。
つまり.......
#define KANE 0
#define SAM 0
#define EKI 0 という結果にしたいと思ってるんやけど
どないしたらよろしいやろか??
みなはんお忙しいとは思いますが一つお力を貸していただきたい思います。どうぞよろしゅうたのんます。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 1024
int main()
{
rightsidehfunction();
leftsidehfunction();
}
/* 左辺の値をとって.hファイルに書き込む関数 */
int leftsidehfunction()
{
FILE *ft;
FILE *fh;
char buf[MAX];
char *cPid[MAX]; // 採取したPID
char *cWorkRegiAdd; // 採取文字列作業域アドレス
char *cStoRegiAdd; // 文字列格納域アドレス
int n = 0;
int str = 0;
int k;
char *p;
ft = fopen("test.txt","r");
fh = fopen("test.h","a+");
if (fh == NULL || ft == NULL) {
printf("ファイルを開けません。\n");
return 1;
}
/* ファイルを1行ずつ読み込む処理 */
while (fgets(buf, sizeof buf, ft) != NULL){
cWorkRegiAdd = strtok(buf, "=");
for(k = 0;k < n;k++){
if(*cPid[k] != *cWorkRegiAdd)continue;
if(strcmp(cPid[k],cWorkRegiAdd) == 0)break;
}
if(k < n) continue;
cStoRegiAdd = malloc(strlen(cWorkRegiAdd) + 1);
strcpy(cStoRegiAdd,cWorkRegiAdd);
cPid[n] = cStoRegiAdd;
fprintf(fh, "#define %s 0\n", cStoRegiAdd);
n++;
}
fclose(fh);
fclose(ft);
return 0;
}
/* 右辺の値をとって.hファイルに書き込む関数 */
int rightsidehfunction()
{
FILE *ft; // 入力ファイルポインタ
FILE *fh; // 出力ファイルポインタ
int c; //読み込み文字
char buf[MAX]; //バッファ領域
char buf1[MAX];
char cPid[MAX]; // 採取したPID
char *cWorkRegiAdd; // 採取文字列作業域アドレス
char *cStoRegiAdd; // 文字列格納域アドレス
char *cRegiTab[MAX]; // 文字列登録表
int iflag = 0; // 0/1; 右/左のクオート
int ichs = 0; // chrの文字数
int istr = 0; // strの文字数
int k; // ntrの探索index
int iOid; //OID
char *p;
ft = fopen("test.txt", "r");
fh = fopen("test.h", "w");
if (fh == NULL || ft == NULL) {
printf("ファイルを開けません。\n");
return 1;
}
//ファイルを1文字ずつ読み込む
while ((c = fgetc(ft)) != EOF) {
switch (c) {
case '"':
iflag = 1 - iflag;
/*右のクオート*/
if (iflag == 0) {
cPid[ichs] = '\0';
cWorkRegiAdd = cPid;
for(k = 0;k < istr;k++){
if(*cRegiTab[k] != *cWorkRegiAdd) continue;
if(strcmp(cRegiTab[k],cWorkRegiAdd) == 0) break;
}
if(k == istr){
cStoRegiAdd = malloc(strlen(cWorkRegiAdd) + 1);
strcpy(cStoRegiAdd,cWorkRegiAdd);
cRegiTab[ist[/url] = cStoRegiAdd;
istr++;
fprintf(fh, "#define %s 0\n", cStoRegiAdd);
}
ichs = 0;
}
break;
case '\n':
if (iflag == 1) {
cPid[ichs] = '\0';
iflag = 0;
}
ichs = 0;
break;
default:
if (iflag == 1) {
cPid[ichs] = c;
if (ichs < MAX - 1) {
ichs++;
}
}
break;
}
}
/* ファイルの最後が改行じゃなかった場合 */
if (ichs>0) {
cPid[ichs]='\0';
}
fclose(ft);
fclose(fh);
return 0;
}
ほな質問させていただきますよって。
下記のソースコードを見てほしいんやけど。。
今の段階でファイルの中身が
EKI="KANE"-"SAM"
KANE="SAM"%"EKI" だとします。これを読み込んで.hファイルに書き込んだ場合
#define KANE 0
#define SAM 0
#define EKI 0
#define EKI 0
#define KANE 0 となります。これを重複したものに関しては2度書き込まないようにしたいんやけど。。。
つまり.......
#define KANE 0
#define SAM 0
#define EKI 0 という結果にしたいと思ってるんやけど
どないしたらよろしいやろか??
みなはんお忙しいとは思いますが一つお力を貸していただきたい思います。どうぞよろしゅうたのんます。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 1024
int main()
{
rightsidehfunction();
leftsidehfunction();
}
/* 左辺の値をとって.hファイルに書き込む関数 */
int leftsidehfunction()
{
FILE *ft;
FILE *fh;
char buf[MAX];
char *cPid[MAX]; // 採取したPID
char *cWorkRegiAdd; // 採取文字列作業域アドレス
char *cStoRegiAdd; // 文字列格納域アドレス
int n = 0;
int str = 0;
int k;
char *p;
ft = fopen("test.txt","r");
fh = fopen("test.h","a+");
if (fh == NULL || ft == NULL) {
printf("ファイルを開けません。\n");
return 1;
}
/* ファイルを1行ずつ読み込む処理 */
while (fgets(buf, sizeof buf, ft) != NULL){
cWorkRegiAdd = strtok(buf, "=");
for(k = 0;k < n;k++){
if(*cPid[k] != *cWorkRegiAdd)continue;
if(strcmp(cPid[k],cWorkRegiAdd) == 0)break;
}
if(k < n) continue;
cStoRegiAdd = malloc(strlen(cWorkRegiAdd) + 1);
strcpy(cStoRegiAdd,cWorkRegiAdd);
cPid[n] = cStoRegiAdd;
fprintf(fh, "#define %s 0\n", cStoRegiAdd);
n++;
}
fclose(fh);
fclose(ft);
return 0;
}
/* 右辺の値をとって.hファイルに書き込む関数 */
int rightsidehfunction()
{
FILE *ft; // 入力ファイルポインタ
FILE *fh; // 出力ファイルポインタ
int c; //読み込み文字
char buf[MAX]; //バッファ領域
char buf1[MAX];
char cPid[MAX]; // 採取したPID
char *cWorkRegiAdd; // 採取文字列作業域アドレス
char *cStoRegiAdd; // 文字列格納域アドレス
char *cRegiTab[MAX]; // 文字列登録表
int iflag = 0; // 0/1; 右/左のクオート
int ichs = 0; // chrの文字数
int istr = 0; // strの文字数
int k; // ntrの探索index
int iOid; //OID
char *p;
ft = fopen("test.txt", "r");
fh = fopen("test.h", "w");
if (fh == NULL || ft == NULL) {
printf("ファイルを開けません。\n");
return 1;
}
//ファイルを1文字ずつ読み込む
while ((c = fgetc(ft)) != EOF) {
switch (c) {
case '"':
iflag = 1 - iflag;
/*右のクオート*/
if (iflag == 0) {
cPid[ichs] = '\0';
cWorkRegiAdd = cPid;
for(k = 0;k < istr;k++){
if(*cRegiTab[k] != *cWorkRegiAdd) continue;
if(strcmp(cRegiTab[k],cWorkRegiAdd) == 0) break;
}
if(k == istr){
cStoRegiAdd = malloc(strlen(cWorkRegiAdd) + 1);
strcpy(cStoRegiAdd,cWorkRegiAdd);
cRegiTab[ist[/url] = cStoRegiAdd;
istr++;
fprintf(fh, "#define %s 0\n", cStoRegiAdd);
}
ichs = 0;
}
break;
case '\n':
if (iflag == 1) {
cPid[ichs] = '\0';
iflag = 0;
}
ichs = 0;
break;
default:
if (iflag == 1) {
cPid[ichs] = c;
if (ichs < MAX - 1) {
ichs++;
}
}
break;
}
}
/* ファイルの最後が改行じゃなかった場合 */
if (ichs>0) {
cPid[ichs]='\0';
}
fclose(ft);
fclose(fh);
return 0;
}
Re:ファイル読み込み
要約すると、マクロ定義が書かれたヘッダファイルを出力するプログラムで、
マクロ名を重複しないようにするには?
と、いうことですかね?
それなら、単純に出力してあるマクロ名を記憶しておいて、
既に書き込まれていたら書き込まないように処理すればいいと思います。
# あと、字下げされていないので、非常に読みづらいです。
マクロ名を重複しないようにするには?
と、いうことですかね?
それなら、単純に出力してあるマクロ名を記憶しておいて、
既に書き込まれていたら書き込まないように処理すればいいと思います。
# あと、字下げされていないので、非常に読みづらいです。
Re:ファイル読み込み
返信ありがとうございます。
質問の意味分かりませんか??
ソースを実行すれば一目瞭然なんですけど....
単純にテキストファイルを読み込んで、条件付で読み込んだものを.h
ファイルに書式付で書き込んでいるだけ何すけど。。。。
特に難しいことはしていないですよ。
出来れば具体的にどこを直したらいいとか教えていただきたいんですけど????
質問の意味分かりませんか??
ソースを実行すれば一目瞭然なんですけど....
単純にテキストファイルを読み込んで、条件付で読み込んだものを.h
ファイルに書式付で書き込んでいるだけ何すけど。。。。
特に難しいことはしていないですよ。
出来れば具体的にどこを直したらいいとか教えていただきたいんですけど????
Re:ファイル読み込み
見ている人は全員が現在コンパイル出来る環境にあるとは限りませんし、読みにくい、わかりにくいという指摘に「実行すればわかるだろう」という返答はナンセンスです。
携帯で見てる人もいますしね。
だいたい、タグを使う、丁寧語を使う、そのたもろもろの規約を守っていません。
利用するならまず規約を読みましょう。
いちいち変な関西弁で書く意味がわかりません。
携帯で見てる人もいますしね。
だいたい、タグを使う、丁寧語を使う、そのたもろもろの規約を守っていません。
利用するならまず規約を読みましょう。
いちいち変な関西弁で書く意味がわかりません。
Re:ファイル読み込み
投稿する文章としてふさわしくない事には変わりないのに、わざわざ横から指摘する必要がありませんね。
何故こんな事を擁護するのかもわかりません。スレ主の別ハンドルなんでしょうか?
あなたは会議でプレゼンする時や、上司や初対面の相手に話す時もそんな話し方なんでしょうか?
文面から言って小学生や中学生かもしれませんが、それならまず社会の基本マナーを覚ることから始めましょう。
何故こんな事を擁護するのかもわかりません。スレ主の別ハンドルなんでしょうか?
あなたは会議でプレゼンする時や、上司や初対面の相手に話す時もそんな話し方なんでしょうか?
文面から言って小学生や中学生かもしれませんが、それならまず社会の基本マナーを覚ることから始めましょう。
Re:ファイル読み込み
敬語のカテゴリーに属する丁寧語と、
方言のカテゴリーに属する関西弁とを
同じ土俵に立たせるのは変だと言っているだけです。
日本語がわかりますか?
関西弁であろうがいわゆる標準語であろうが、
内容が正確に伝わりさえすればどちらでもいいです。
関西弁だから丁寧ではないなんておっしゃっていると、
関西の方から総スカンを食らうおそれがあります。
理解できますか?
方言のカテゴリーに属する関西弁とを
同じ土俵に立たせるのは変だと言っているだけです。
日本語がわかりますか?
関西弁であろうがいわゆる標準語であろうが、
内容が正確に伝わりさえすればどちらでもいいです。
関西弁だから丁寧ではないなんておっしゃっていると、
関西の方から総スカンを食らうおそれがあります。
理解できますか?
Re:ファイル読み込み
あまり状況が芳しくなくなってきたので規約の面から発言させて頂きます。
やはり関西弁に限らず方言で話す事は丁寧ではありません。
関西に住んでいる人は関西弁しか話せないというのなら、関西弁は丁寧ではないという発言に問題は生じるかもしれませんが、そういうわけではありませんよね。
現に私は関西に住んでいますが、ネットを初め、公の場等で話す時は標準語で話します。
また、生まれは広島なのですが、ネットで「じゃけぇねぇ?へじゃけぇ、してぇやぁ」みたいな言葉は使おうとは思いません。
やはり標準語で話せるのにあえて方言で書く事は丁寧ではありませんよね。
例えば、人から物を頼まれる時、初対面の相手にネット上で「じゃけぇねぇ?へじゃけぇ、してぇやぁ」と頼まれるのと
「そういう理由で、これをして頂けないでしょうか?」と頼まれるのはどちらが気分よく引き受けられるでしょうか。
>内容が正確に伝わりさえすればどちらでもいいです。
と仰っていますが、その文章を読むことで気分を害する方がいらっしゃれば、それは改善するべきだと私は考えます。
その本人が改善出来ないのなら仕方ないですが、あえて方言で記載しているように感じました。
規約には方言で話すなとは書いてありませんが、
規約にいちいち「○○禁止」「方言禁止」とか書きたくないので、ある程度は常識の範囲内で判断して頂きたいと思っています。
規約にない事は守る必要が無いという基準では六法全書みたいな規約ページになってしまいます・・・。
今回の件につきましては、丁寧語であり、かつ標準語で話していただきますようお願いします。
やはり関西弁に限らず方言で話す事は丁寧ではありません。
関西に住んでいる人は関西弁しか話せないというのなら、関西弁は丁寧ではないという発言に問題は生じるかもしれませんが、そういうわけではありませんよね。
現に私は関西に住んでいますが、ネットを初め、公の場等で話す時は標準語で話します。
また、生まれは広島なのですが、ネットで「じゃけぇねぇ?へじゃけぇ、してぇやぁ」みたいな言葉は使おうとは思いません。
やはり標準語で話せるのにあえて方言で書く事は丁寧ではありませんよね。
例えば、人から物を頼まれる時、初対面の相手にネット上で「じゃけぇねぇ?へじゃけぇ、してぇやぁ」と頼まれるのと
「そういう理由で、これをして頂けないでしょうか?」と頼まれるのはどちらが気分よく引き受けられるでしょうか。
>内容が正確に伝わりさえすればどちらでもいいです。
と仰っていますが、その文章を読むことで気分を害する方がいらっしゃれば、それは改善するべきだと私は考えます。
その本人が改善出来ないのなら仕方ないですが、あえて方言で記載しているように感じました。
規約には方言で話すなとは書いてありませんが、
規約にいちいち「○○禁止」「方言禁止」とか書きたくないので、ある程度は常識の範囲内で判断して頂きたいと思っています。
規約にない事は守る必要が無いという基準では六法全書みたいな規約ページになってしまいます・・・。
今回の件につきましては、丁寧語であり、かつ標準語で話していただきますようお願いします。
Re:ファイル読み込み
>バグさん
>『関西弁は丁寧語ではない』というのは正しいと思いますけど?
確かに丁寧な言葉遣いではありませんが、関西弁や他の方言の中にも地方独特の敬語や言い回しが
あるので、上記の指摘は誤りだと思います。
>通りすがりさん
>いちいち変な関西弁で書く意味がわかりません。
関西弁としてはおかしくないと思います。それとも関西弁が変だというのでしょうか?
>投稿する文章としてふさわしくない事には変わりないのに、わざわざ横から指摘する必要がありませんね。
以前、別のトピで「ツンデレ」や「じじい」バージョンの回答がありましたが、
あちらは投稿するにふさわしい文章だと言う事でしょうか?
それとも回答者であれば一部規約を守らず(丁寧語を使わず)に投稿することが許されるのでしょうか?
※個人的にあの回答の文章は好きですので、貶める為に例に出させてもらったわけではありません。念のため。
>関西人さんへ
方言はその地方以外の人間以外には分からなかったり意味が変わるものもあるので、
こういった公の場では「標準語で丁寧な言葉遣いを心がけて」書き込みされた方がいいと思います。
ビジネス文書などは標準語が基本ですから、「標準語が出来ない=常識が欠落している」と
勘違いしている人が多くいます。
ただ、通りすがりさんの仰っている通り「実行すればわかる」という開き直った態度は
全国どこであってもよくありません。
以上、関西圏の人間として言わせてもらいました。
自分はこのトピにはこれ以上参加しませんので、その旨了解ください。
PS
質問と全く関係なくて申し訳ありません。荒れない事を祈ってます。
>『関西弁は丁寧語ではない』というのは正しいと思いますけど?
確かに丁寧な言葉遣いではありませんが、関西弁や他の方言の中にも地方独特の敬語や言い回しが
あるので、上記の指摘は誤りだと思います。
>通りすがりさん
>いちいち変な関西弁で書く意味がわかりません。
関西弁としてはおかしくないと思います。それとも関西弁が変だというのでしょうか?
>投稿する文章としてふさわしくない事には変わりないのに、わざわざ横から指摘する必要がありませんね。
以前、別のトピで「ツンデレ」や「じじい」バージョンの回答がありましたが、
あちらは投稿するにふさわしい文章だと言う事でしょうか?
それとも回答者であれば一部規約を守らず(丁寧語を使わず)に投稿することが許されるのでしょうか?
※個人的にあの回答の文章は好きですので、貶める為に例に出させてもらったわけではありません。念のため。
>関西人さんへ
方言はその地方以外の人間以外には分からなかったり意味が変わるものもあるので、
こういった公の場では「標準語で丁寧な言葉遣いを心がけて」書き込みされた方がいいと思います。
ビジネス文書などは標準語が基本ですから、「標準語が出来ない=常識が欠落している」と
勘違いしている人が多くいます。
ただ、通りすがりさんの仰っている通り「実行すればわかる」という開き直った態度は
全国どこであってもよくありません。
以上、関西圏の人間として言わせてもらいました。
自分はこのトピにはこれ以上参加しませんので、その旨了解ください。
PS
質問と全く関係なくて申し訳ありません。荒れない事を祈ってます。
Re:ファイル読み込み
関東圏の人間として言わせて頂きます。
今まで、私が使ってる言葉が標準語だとは思ってません。
横浜での方言は「じゃん。」かと思われますが
教えてくれても、いいじゃん?
それで、いいじゃん。
遊ぼう♪
横須賀では「べ。」になる事が多かったです。
教えてくれても、いいべ?
それで、いいべ。
遊ぶべ♪
私が、いずれも友達に使う言葉です。
>質問と全く関係なくて申し訳ありません。荒れない事を祈ってます。
木霊さんの、ご意見に賛同させて頂きます。
どうしてもやるせないので私の意見、投稿させて頂きました。
失礼します。
今まで、私が使ってる言葉が標準語だとは思ってません。
横浜での方言は「じゃん。」かと思われますが
教えてくれても、いいじゃん?
それで、いいじゃん。
遊ぼう♪
横須賀では「べ。」になる事が多かったです。
教えてくれても、いいべ?
それで、いいべ。
遊ぶべ♪
私が、いずれも友達に使う言葉です。
>質問と全く関係なくて申し訳ありません。荒れない事を祈ってます。
木霊さんの、ご意見に賛同させて頂きます。
どうしてもやるせないので私の意見、投稿させて頂きました。
失礼します。
Re:ファイル読み込み
他の方を煽る発言はどうかお控え下さい。
このトピはこの件について話し合うトピではないので、この件について討論したいという希望があればトピをお立て下さい。
このトピではまず関西人さんの質問内容を解決しましょう。
今後の投稿は標準語、丁寧語で行っていただきますようお願いします。
※
規約を少々変更し、「極端な方言禁止」とさせていただきました。
方言禁止と書くと、一言でも些細な方言が入ると指摘される可能性があるので、
些細な方言は可とさせていただきました。
この辺の判断は常識の範囲でご判断下さい。
このトピはこの件について話し合うトピではないので、この件について討論したいという希望があればトピをお立て下さい。
このトピではまず関西人さんの質問内容を解決しましょう。
今後の投稿は標準語、丁寧語で行っていただきますようお願いします。
※
規約を少々変更し、「極端な方言禁止」とさせていただきました。
方言禁止と書くと、一言でも些細な方言が入ると指摘される可能性があるので、
些細な方言は可とさせていただきました。
この辺の判断は常識の範囲でご判断下さい。