
C言語の質問です。
勉強不足で聞くのは申し訳ないのですが、
自分であれこれとやってみて、どうしていいのか分からなくなってしまいました。
csvファイルの中身は、6行目までは不要な文字列などが入っていて、7行目から使いたい数値となっています。その数値は5桁と分かっています。
さらに、データ数としては、約300000行~10000000行とデカイ上に定まっていません。
その数値に値をかけて変換してファイルとしてだしたいのですが、どうすればよいのでしょうか?
下のようなイメージ↓(値はテキトー)
***********************************
元ファイル→掛ける値→後ファイル
54321→→ *10/12365→ 1.4243
: :
: :
************************************
以下は自分で書いたものですが、
????????????にしてあるあたり(ファイルを読み込む部分)
がどうすればいいかわかりません。
変数が色々あるのは迷走の証です。
どうぞ、よろしくお願いします。
int main(){
FILE *in,*out;
char fname1[30],fname2[30];
char s[5];
double n1;
int n,i=0;
int start=7;
int line=0;
printf("読み込むファイル名を入力してください\n");
scanf("%s",&fname1);
in=fopen(fname1,"r");
out=fopen(fname2,"r");
if(in==NULL){
printf( "ファイルが開けません\n",fname1);
return -1;
}
else{
????????????????????
??????????????????
printf("%d \n",n1);
fprintf(out,"%s \n",n1);
}
}
printf("書き込むファイル名を入力してください\n");
scanf("%s",&fname2);
fclose(in);
fclose(out);
return 0;
}
No.1ベストアンサー
- 回答日時:
???????の部分ですが、例えば、
char str[MAX_STR];
while (fgets(str, MAX_STR, in) != NULL) {
printf("%s", str);
}
のようにすれば、in で開いているCSVファイルから一行ずつ読み込んだ文字列が、strに格納されて表示されます。
この while はCSVファイルの終端までいくと終了します。
fgets関数は、呼び出すたびにファイルから一行ずつ読み込んでくれるので、
CSVファイルの先頭の6行は不要ということなら、例えば
for (i = 0 ; i < 6 ; i++) {
fgets(str, MAX_STR, in);
}
とすると、先頭の6行はスキップできます。
また、読み込んだCSVの文字列から対象の値を読み込むには、strtok関数などを使って
カンマで文字列を分解するようにするといいのではないかと思います。
strtok関数で文字列を分解したら、必要な値の部分の文字列をatoi関数(もし小数ならatof関数)で数値に変換し、
必要な計算を行った後に、fprintf関数で out で開いている方のファイルに出力する…。という流れになるんじゃないかと思います。
いかがでしょう?
http://www9.plala.or.jp/sgwr-t/lib/strtok.html
http://www.bohyoh.com/CandCPP/C/Library/atoi.html
http://www.bohyoh.com/CandCPP/C/Library/fprintf. …
できました。ありがとうございます。
最終的には
while(fgets(str,256,inp)!=NULL){
line++;
if(line>start){
k++;
times=time*k;
n=strtok(str,", ");
n1=atoi(n);
n2=((double)n1)*20/65536-10;
printf("%lf %lf \n",times,n2);
fprintf(outp,"%lf %lf \n",times,n2);
}
}
のような形にしました。
あと、恥ずかしい話ですが、
なんどやっても上手くいかない原因の一つにfopenの書き込む側のモードまでrにしていたというのがありました;;
No.2
- 回答日時:
fgets で「ファイルから一行ずつ読み込んでくれる」と言い切っちゃうのはいかがなものだろうか>#1. 1行の長さがわかっているならともかく.
あと, 「実際のデータが入っている」 6行目以降はどういう形式になっているんでしょうか? 1行に 1個しかデータがないなら, 特に困ることもないような気がしますが.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語 3 2022/10/04 15:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
フリーソフトウェアでflaファイ...
-
VBAでHTMLファイルを扱うにはど...
-
VBでファイルの関連付け
-
FLVとSWFの違い
-
SGファイルって何ですか?
-
VC++の外部依存関係
-
ファイル名の先頭にアンダース...
-
【C#】リソースファイルの埋め...
-
バッファとは何ですか
-
stdio.hをオープンできない…
-
どんなプログラムを書いても指...
-
教えてください!vectorworksに...
-
教えてください!vector works...
-
JARファイルをEclipseを使って...
-
コンパイルするときに、ファイ...
-
jarの開き方を教えてください。
-
テキストファイルの文字を消す方法
-
VBAでEXEファイルを動かす方法...
-
FTPでputすると空ファイルが出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
csvファイルを開かずに文字を検...
-
バッチで118項目のCSVを処理し...
-
CSVファイルへの保存の際、デー...
-
グローバル変数のよくない使い...
-
テキストファイルの最終行を削...
-
ドラッグアンドドロップでファ...
-
VB.NETによるプロセス間通信
-
VBAにてEXCEL以外のファイル(テ...
-
分割コンパイルの#defineについて
-
ファイルの結合
-
iniファイルに追記がしたいです。
-
VBに、Cのincludeのようなもの...
-
動画処理のライブラリについて
-
Cでのネットワークファイルの読...
-
ダイアログボックスで複数フォ...
-
C言語のfopenについて教えてく...
-
「VBScript」ADODB.Streamにお...
-
マウスポインタの変更
おすすめ情報