
KOKUGO_TEN=90
SEITO_NUM=0012
TEST_DATE=1030 というファイルを読み込み
90,0012,1030, と出力したいんですが
#Iinclude <stdio.h>
type struct{
char kokugo[KOKUGO +1];
char seito[SEITO +1];
char test[TEST +1];
} seiseki;
int Intxtfile(seiseki *txtstr, char *ptxt);
int Outcsvfile(seiseki *csvstr, char *pcsv);
int main(int argc, char *argv[])
{
char txtfile[256]
char csvfile[256]
seiseki filedata;
int in = 0;
int out = 0;
in = Intxtfile(&filedata, txtfile);
if(In == -1){
return 1;
}
out = Outcsvfile(&filedata, csvfile);
if(Out == -1){
retrun 1;
}
return 0;
}
int Intxtfile(seiseki *txtstr, char *ptxt) /* テキストファイル読み取り関数*/
{
FILE *fp;
fp = fopen("moshi.txt", "r");
if(fp == NULL){
puts("ファイルオープンエラー");
return 1;
}
fclose(fp);
return 0;
}
int Outcsvfile(seiseki *csvstr, char *pcsv) /*CSV出力関数*/
{
FILE *fp2;
fp2 == fopen("moshi.csv", "w");
if(fp2 == NULL){
puts("ファイルオープンエラー");
return 1;
}
fprintf(fp2, "%s,%s,%s, \n, csvstr -> kokugo,
csvstr -> seito,
csvstr -> test);
fclose(fp);
return 0;
}
エラー処理は中途半端なんですが、これを開くと
ファイルオープンエラーになってしまいます。
どこが間違ってますか?
読み取り関数と出力関数は必要なんですが、もっと簡単な方法はありますか?
No.7ベストアンサー
- 回答日時:
こんなことがしたいのでしょうか。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define KOKUGO (2)
#define SEITO (4)
#define TEST (4)
#define OK (0)
#define NG !(OK)
typedef struct {
char kokugo[KOKUGO+1];
char seito[SEITO+1];
char test[TEST+1];
} seiseki;
int openFiles(FILE **fpin, FILE **fpout)
{
*fpin = fopen("moshi.txt", "r");
*fpout = fopen("moshi.csv", "w");
return (fpin && fpout) ? OK : NG;
}
seiseki readTextFile(FILE *fp)
{
seiseki data;
char str[80];
char *dlm = "=", *wk;
int n = 0;
while (fgets(str, sizeof(str), fp)) {
if (str[strlen(str)-1] == '\n') {
str[strlen(str)-1] = '\0';
}
strtok(str, dlm);
wk = strtok(NULL, dlm);
strcpy((n == 0) ? data.kokugo : (n == 1) ? data.seito : data.test, wk);
n++;
}
return data;
}
void writeCSVFile(FILE *fp, seiseki data)
{
fprintf(fp, "%s,%s,%s,", data.kokugo, data.seito, data.test);
}
void closeFiles(FILE *fpin, FILE *fpout)
{
fclose(fpin);
fclose(fpout);
}
int main(void)
{
seiseki data;
FILE *fpin, *fpout;
if (openFiles(&fpin, &fpout) == NG) {
fprintf(stderr, "ファイルオープンエラー\n");
exit(1);
}
data = readTextFile(fpin);
writeCSVFile(fpout, data);
closeFiles(fpin, fpout);
return 0;
}
No.6
- 回答日時:
とりあえず、"ファイルオープンエラー"の原因としては、カレントディレクトリが合っていないのではないかと。
> fp = fopen("moshi.txt", "r");
じゃなくて、
fp = fopen("c:\\xxxx\\yyyy\\zzzzz\\moshi.txt", "r");
といった感じで指定してみるとどうなりますか?

No.5
- 回答日時:
漠然と読んでてですね・・・
気になるところが・・・・
int Intxtfile(seiseki *txtstr, char *ptxt)関数は正常にファイルが読み込めたとき0を返し、エラーで1を返す。
int Outcsvfile(seiseki *csvstr, char *pcsv) 関数も正常終了なら0を返し、エラーで1を返す。。。
だとしたらですよ、in = Intxtfile(&filedata, txtfile);のところではinは0か1に決まるでしょ?
out = Outcsvfile(&filedata, csvfile);もそう。outは0か1しかないんです。
でも次のif(in == -1){でinが-1ならExitCodeを1にして処理終了。outも同じで-1が戻ってきたらExitCodeを1にして処理終了。
論理的に成り立っていません。
つまりこのmain関数はExitCodeを0にして正常終了するしかないんです。
それを踏まえてみても、コンパイラはエラーを出しませんでしたよ。
(VC++6で試しにコンパイルしてみた)
それにですね、moshi.txtが存在しなかった時のみファイルオープンエラーがでました、当然ですね。fpがNULLで帰って来ますもん。
ということはmoshi.txtが実行ディレクトリになかったと断言せざるをえないです。
つか、大体読み込みファイルをオープンだけして、すぐ閉じるのに何か意味はあるんですか???
テキストファイル・・・読みに行かないんですか?
勿論、(項目名)=(数値)を項目名を見つつ、数値のみ取り出すルーチンも必要ですがそれが全く欠落してます。。。
結論:貴方は”何を”、”どうしたい”んですか?
No.4
- 回答日時:
> で一応コンパイラは通ります。
いいえ。通りません。逐一指摘してみましょうか。
> #Iinclude <stdio.h>
スペル間違い。
> type struct{
typeというキーワードはない。
> char kokugo[KOKUGO +1];
> char seito[SEITO +1];
> char test[TEST +1];
KOKOGO, SEITO, TEST の値が不明。おそらく#define抜け。
> if(In == -1){
Inという変数は定義していない。
> retrun 1;
retrunという名前の文はない。
疲れたので以下は省略します。
実行時の「ファイルオープンエラー」が出るということは、
お手元にはコンパイルの通ったコードがあるはずですので、
お願いですから、それをそっくりそのまま見せてくださいませんか?
この回答への補足
#include <stdio.h>
#define KOKUGO 2
#define SEITO 4
#define TEST 4
typedef struct{
char kokugo[KOKUGO +1];
char seito[SEITO +1];
char test[TEST +1];
} seiseki;
int Intxtfile(seiseki *txtstr, char *ptxt);
int Outcsvfile(seiseki *csvstr, char *pcsv);
int main(int argc, char *argv[])
{
char txtfile[256]
char csvfile[256]
seiseki filedata;
int in = 0;
int out = 0;
in = Intxtfile(&filedata, txtfile);
if(in == -1){
return 1;
}
out = Outcsvfile(&filedata, csvfile);
if(out == -1){
return 1;
}
return 0;
}
int Intxtfile(seiseki *txtstr, char *ptxt) /* テキストファイル読み取り関数*/
{
FILE *fp;
fp = fopen("moshi.txt", "r");
if(fp == NULL){
puts("ファイルオープンエラー");
return 1;
}
fclose(fp);
return 0;
}
int Outcsvfile(seiseki *csvstr, char *pcsv) /*CSV出力関数*/
{
FILE *fp2;
fp2 = fopen("moshi.csv", "w");
if(fp2 == NULL){
puts("ファイルオープンエラー");
return 1;
}
fprintf(fp2, "%s,%s,%s, \n", csvstr -> kokugo,
csvstr -> seito,
csvstr -> test);
fclose(fp2);
return 0;
}
です。よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数ファイルの同時読み込みの...
-
C言語でファイル読み書きを早く...
-
fopenでファイル名に、変数を使...
-
c言語でのfscanfについて
-
ファイルへの書込み処理が異常...
-
ファイル出力で改行を入れたい!
-
fscanfでループしてしまう。
-
C言語にてXMLファイルから任意...
-
テキストファイル内に対して, ...
-
datファイルの読み込み
-
ファイルに行番号を追加
-
大量の入力ファイルを扱うとき...
-
辞書順にソートしたいのですが...
-
InternetReadFileを使ったファ...
-
C言語 連番データの読み込み
-
C言語におけるファイル読み込み...
-
数値のみ抽出(C言語)
-
簡易grep関数ができません。助...
-
VisualStudioでのファイルの入...
-
fgets( ) の返り値は何?
おすすめ情報