ダイアログ画面からの入力によるCSVファイルのレコードの追加 – 固定ページ 2 – プログラミング – Home

ダイアログ画面からの入力によるCSVフ...
 
通知
すべてクリア

[解決済] ダイアログ画面からの入力によるCSVファイルのレコードの追加

固定ページ 2 / 3

さやぴ
 さやぴ
(@さやぴ)
ゲスト
結合: 18年前
投稿: 29
 

>どこで詰まってるのかわからないです・・
私も分かりません。デバッグして、何処まで動いているのか確認して下さい。

>CString Data_Write[255][255] = {{mych},{mych1}};
意味が理解できませんが、単純にそのまま保存してはダメなのでしょうか?
Cで書かれているようなので、こんな感じで。
fprintf(fp,%s,%s,\n,ss1,ss2);


返信引用
さち
 さち
(@さち)
ゲスト
結合: 18年前
投稿: 16
Topic starter  

たくさんの御返答、有難う御座います。
さやぴ さんの提案を飲んでやってみたところ、テキストファイルへの書き込みはできま
した。が、CSVやExcelファイルへの書き込みができません。
御指摘願います。

void CCsvDlg::OnButton1()
{
char mych[30], mych1[30], mych2[30];
CString ss, ss1, ss2;

CEdit* myED1 = (CEdit*) GetDlgItem(IDC_EDIT1);
CEdit* myED2 = (CEdit*) GetDlgItem(IDC_EDIT2);

myED1 -> GetWindowText (ss1); //ED1の文字列を取り出
myED2 -> GetWindowText (ss2); //ここまではOK

FILE *fp;
if((fp = fopen(.\\data\\export.csv,a)) == NULL){
AfxMessageBox( CSVファイルが開けません  ,MB_OK |
MB_ICONEXCLAMATION);
}
ss = ss1+,+ss2;
strcpy (mych ,(const char*)ss);
fprintf(fp,mych);
}
fclose(FILE *fp);

openするファイルをテキストファイルにすると追加書き込みできました。
今CSVファイルを開くようになってます、エラーはでませんが書き込みは成されてませ
ん。


返信引用
さち
 さち
(@さち)
ゲスト
結合: 18年前
投稿: 16
Topic starter  

訂正です。

ss = ss1+,+ss2;
strcpy (mych ,(const char*)ss);

fprintf (fp, %c,\n, mych);

上の書き方だとss1とss2をまとめちゃってますけど、
 
/*ss = ss1+,+ss2;
strcpy (mych ,(const char*)ss);
*/
fprintf(fp, %c, %c, \n, ss1, ss2);

ともやってみましたができませんでした。

テキストへ書き込むのとCSVやExcelに書き込むのとでは何が違うのでしょうか?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 今CSVファイルを開くようになってます、エラーはでませんが書き込みは成されてません。

CSVはただのテキストファイルです。

> fprintf(fp, %c, %c, \n, ss1, ss2);
> ともやってみましたができませんでした。

書式、%s,%s\n じゃありません? なぜに%c ?


返信引用
さち
 さち
(@さち)
ゲスト
結合: 18年前
投稿: 16
Topic starter  

あ、すみません間違えました。%s,%s,\n です。
訂正に訂正を重ねてしまってすみませんm(_ _)m

上の場合 export.txt への書き込みはできるのですが、 export.csv/.xls への書き込
みができません。
どうすれば書き込めるようになりますか?


返信引用
さやぴ
 さやぴ
(@さやぴ)
ゲスト
結合: 18年前
投稿: 29
 

> fprintf(fp, %c, %c, \n, ss1, ss2);
出力は文字ではなく、文字列です。
fprintf(fp,%s,%s,\n,ss1,ss2);

>テキストへ書き込むのとCSVやExcelに書き込むのとでは何が違うのでしょうか?
CSVファイルは、データをカンマで区切っただけで、実体はテキストファイルです。
Excelファイルへの書き込みは、全くの別ものです。

CSVに書き込めませんか? う~ん、少し考えてみますが・・・。


返信引用
翼
 翼
(@翼)
ゲスト
結合: 19年前
投稿: 11
 

↑のソース 中カッコの数がおかしい&最後のfclose(FILE* fp)はコンパイルエラーでは?

void CCsvDlg::OnButton1()
{
char mych[30], mych1[30], mych2[30];
CString ss, ss1, ss2;

CEdit* myED1 = (CEdit*) GetDlgItem(IDC_EDIT1);
CEdit* myED2 = (CEdit*) GetDlgItem(IDC_EDIT2);

myED1 -> GetWindowText (ss1); //ED1の文字列を取り出
myED2 -> GetWindowText (ss2); //ここまではOK

FILE *fp;
if((fp = fopen(.\\data\\export.csv,a)) == NULL)
{
AfxMessageBox( CSVファイルが開けません  ,MB_OK |
MB_ICONEXCLAMATION);
return;
}
ss = ss1+,+ss2;
strcpy (mych ,(const char*)ss);

fprintf(fp,mych);

fclose(fp);

}
これでいけるでしょ


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

~.xlsは単純なテキスト形式ではありません。
(エクセルで適当に~.xlsを作ってテキストエディタで開いてみると何がなんだかわから
ないと思います。)
ですので、上のように単純にfprintとかでは書き込めません。

Officeのオートメーション機能を使って~.xlsを作ることは出来ますが、
今のレベルではちょっと理解できないかと思います。
(最悪手動で、~.csvから~.xlsを作ればいいですが。)

ちなみに、~.csvは単なるカンマ区切りのテキストファイルです。
>export.txt 

export.csv
に変えて書き込めばcsvファイルの完成です。


返信引用
さち
 さち
(@さち)
ゲスト
結合: 18年前
投稿: 16
Topic starter  

一応解決いました。皆様、有難う御座いました。

元あった export.txt を export.csv へと拡張子だけ変えて作ったところ、そのCSV
ファイルには書き込むことができました。
助かりました。本当に有難う御座います。

ところで、何故 export.txt とは別に作っておいた export.csv には書き込めなかった
のでしょうか?


返信引用
翼
 翼
(@翼)
ゲスト
結合: 19年前
投稿: 11
 

なぜ書き込めてないかを調べるには

fprintfの戻り値が負の値かどうか、

負の値ならGetLastError()でエラーコードを取得してみる
などですかね・・

fcloseの失敗の可能性も・・ある・・かな?


返信引用
さやぴ
 さやぴ
(@さやぴ)
ゲスト
結合: 18年前
投稿: 29
 

export.csvは、本当にCSVファイルですか?
テキストエディタで開いて、中身がカンマで区切られたデータになっているか
確認してみては如何でしょうか?


返信引用
さち
 さち
(@さち)
ゲスト
結合: 18年前
投稿: 16
Topic starter  

abc.txt → abc.csv → abc.xls → abc.txt
問題なし

abc.xls → abc.csv → abc.txt
abc.xls → abc.txt
ここで文字化けします。

元がtxtだと問題ないんですが(ちゃんとカンマでも区切られてます)、xlsを元にすると
txtに変換した際に文字化けしてしまいます。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>xlsを元にするとtxtに変換した際に文字化けしてしまいます。
当たり前です。
なぜかは説明済み。
>~.xlsは単純なテキスト形式ではありません。
>(エクセルで適当に~.xlsを作ってテキストエディタで開いてみると何がなんだかわか

ないと思います。)

テキストに変換したいならば、Officeのオートメーション機能(COM)を使うしかないで
す。今のレベルでは(以下 略)


返信引用
翼
 翼
(@翼)
ゲスト
結合: 19年前
投稿: 11
 

xlsファイルの拡張子を変えてtxtには出来ませんよ

xlsで作成したcsvを使用したいならcsv形式で保存を選択してcsvファイルを
作成しないといけません

そうすれば普通にテキストエディタでカンマ区切りのデータが表示できます


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

ちなみに

>abc.txt → abc.csv → abc.xls → abc.txt
~~~~~~~~

これExcelでちゃんと開けますか?


返信引用
固定ページ 2 / 3

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました