![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
【C&C++】指定行のみファイル書き込み
先ほどの質問に答えてくれた方ありがとうございましたm(_ _)m
後日(明日?)改めてお礼を書かせていただきます。
次の質問なのですが、(csv)ファイルを読み込み指定した行だけ(csv)ファイルに書き込むやり方です。
ファイルの内容は「文字列(1),文字列(12),数値(9),文字列(30)」となっており
0,000000000000,000000000,あああ
1,111111111111,111111111,いいいいい
2,222222222222,222222222,ううう
0,333333333333,333333333,えええええええええええええええ
のように並んでいます。
このとき、最初の文字列が'0'の時のみファイルに書き込むにはどのような処理を行えばよいのでしょうか?
どうかよろしくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
念のため
>書いてある条件下限定なら 上の部分を
と書きましたが
>ファイルの内容は「文字列(1),文字列(12),数値(9),文字列(30)」となっており
この数字部分がバイト数だとした場合の話です(サンプル見る限りではバイト数と判断しました)
文字数だったらsの配列不足csvファイルの内容次第でまともに動かない条件が発生します
(1文字 = 1バイトではないということを理解してれば判る話)
その辺りは自分で治してください
No.3
- 回答日時:
>while( ( ret = fscanf( fp, "%[^,],%d,%d,%f,%f", s, &n1, &n2, &f1, &f2 ) ) != EOF ){
>if (s == "test01"){
^^^^^^^^^^^^^^^^^^
>printf( "%s,%d,%d,%f,%f", s, n1, n2, f1, f2 );
>}
書いてある条件下限定なら 上の部分を
while( fgets( s, sizeof(s), fp ) != NULL) ){
>if (s[0] == '0'){
>printf( "%s", s );
>}
で十分のはず
書いてある条件外の条件が入ると色々問題箇所があります
>if (s == "test01"){
(C++ではあり得ますが)少なくても C の構文として
この条件に引っかかることはあり得ないはずです
strcmp関数を使うなどしてください
No.1
- 回答日時:
>次の質問なのですが、(csv)ファイルを読み込み指定した行だけ(csv)ファイルに書き込むやり方です。
どのような処理をするか、さっき投稿されている質問とまったく同じだと思うんですけど、
どこら辺で困っているのかを具体的に補足にどうぞ。
この回答への補足
csvファイル「comma.csv」の内容
test01,10,11,1.0,1.1
test02,20,21,2.0,2.1
test03,30,31,3.0,3.1
これは参考にしたどこかのサイトのもので、ファイル出力ではなく標準出力のやつなんですが、
#include <stdio.h>
int main(void)
{
FILE *fp;
char *fname = "comma.csv";
char s[100];
int ret, n1, n2;
float f1, f2;
fp = fopen( fname, "r" );
if( fp == NULL ){
printf( "%sファイルが開けません\n", fname );
return -1;
}
while( ( ret = fscanf( fp, "%[^,],%d,%d,%f,%f", s, &n1, &n2, &f1, &f2 ) ) != EOF ){
printf( "%s,%d,%d,%f,%f", s, n1, n2, f1, f2 );
}
fclose( fp );
return 0;
}
というソースに、if文で最初の文字列指定すればその列だけ出るのかなと思って下のように試してみたんですが何にも出力されなくなってしまいました。どのようにすればよいのでしょう?
#include <stdio.h>
int main(void)
{
FILE *fp;
char *fname = "comma.csv";
char s[100];
int ret, n1, n2;
float f1, f2;
fp = fopen( fname, "r" );
if( fp == NULL ){
printf( "%sファイルが開けません\n", fname );
return -1;
}
while( ( ret = fscanf( fp, "%[^,],%d,%d,%f,%f", s, &n1, &n2, &f1, &f2 ) ) != EOF ){
if (s == "test01"){
^^^^^^^^^^^^^^^^^^
printf( "%s,%d,%d,%f,%f", s, n1, n2, f1, f2 );
}
}
fclose( fp );
return 0;
}
お忙しいでしょうがどなたかお願いしますm(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) csvに別のExcelの文章を差し込む 2 2023/04/01 16:06
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
フローチャート (ファイル併合...
-
SGファイルって何ですか?
-
ASP .NETでファイル選択ダイア...
-
ドラッグアンドドロップでファ...
-
大きいサイズのテキストファイ...
-
バッチで118項目のCSVを処理し...
-
分割コンパイルの#defineについて
-
テキストファイルの最終行を削...
-
.jarおよび.dllについて
-
フリーソフトウェアでflaファイ...
-
VBに、Cのincludeのようなもの...
-
「VBScript」ADODB.Streamにお...
-
VB6.0 特定の位置からの書き換え
-
CSVファイルへの保存の際、デー...
-
Excelマクロでの再読込み方法
-
マクロを作成したファイルを立...
-
識別子の外部結合について
-
ShellExecuteEx→WaitForSingleO...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
バッチで118項目のCSVを処理し...
-
テキストファイルの最終行を削...
-
CSVファイルへの保存の際、デー...
-
SGファイルって何ですか?
-
大きいサイズのテキストファイ...
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
グローバル変数のよくない使い...
-
iniファイルに追記がしたいです。
-
Excelマクロでの再読込み方法
-
C言語のfopenについて教えてく...
-
ハッシュの計算時間について
-
VBAにてEXCEL以外のファイル(テ...
-
Javascript で INI の読み書き
-
同じ名前のファイルを作った場...
-
ASP .NETでファイル選択ダイア...
-
VBに、Cのincludeのようなもの...
おすすめ情報