アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。

以下のようなプログラムは作れますでしょうか?

名前  住所  生年月日 性別
1 ○○○ △△△ ××× □□□
2 ○○○ △△△ ××× □□□
3 ○○○ △△△ ××× □□□

上記の名前などは、気にしないでください。
プログラムを一回実行したら、1行目に実行結果が書き込みされ、2回目実行しましたら、一行目に書き込みした内容は削除されずに、2行目に記述されるというふうに、これを100回実行し100回分のデータ(100行)を出力させます。

もし、よろしければソースも教えていただけたらと思います。

よろしくお願いします。

A 回答 (6件)

#1補>


ファイルが存在するかどうか調べて、存在しない場合は、タイトル行を出力するというようにすればいいと思います。
    • good
    • 0
この回答へのお礼

stat()関数を用いて、ファイルが存在するかどうかを調べました。解決しました。ありがとうございました。

お礼日時:2005/12/29 01:46

ごめんなさい


追加の場合です。
すでに filename.txtに
Num Name Address Birthday Sex
1 Hoge1 Tokyo 1990-1-1 Male
2 Hoge2 Tokyo 1990-10-11 Male
3 Hoge3 Tokyo 1994-12-1 Female
があるとして、以下のコードでいけるかと思います
================================================
#include <iostream>
#include <fstream>
int main()
{
const char fname[] = "filename.txt";
std::fstream INOUT(fname, ios::app);
if(INOUT){
// INOUT << "Num Name Address Birthday Sex" << std::endl;
INOUT << "4 Hoge4 Tokyo 1980-11-1 Female" << std::endl;
INOUT << "5 Hoge5 Osaka 1970-10-11 Male" << std::endl;
INOUT << "6 Hoge6 Sapporo 1964-12-12 Female" << std::endl;
} else{
std::cout << "Cannot Open File!!" << std::endl;
}
INOUT.close();
}
===============================================
INOUTの行を追加したい内容に置き換えればよろしいかと思います。

GNU C++ で確認済み
    • good
    • 0
この回答へのお礼

サンプルプログラムまで詳しくご提示くださいまして有難うございました。
解決しました。ありがとうございました。

お礼日時:2005/12/29 01:47

ごめんなさい追加書き込みの場合でしたね。


先ほどのは無視してください
    • good
    • 0

最初の1回目だけに「名前 住所・・」といったタイトル行を出力したいって事ですかね・・?



自分でしたら、最初にfopen("hoge.txt","r")で開き、行数を確認します。
→オープンに成功した場合、現在存在する行数から今回書き込む行数目を確認して、改めてfopen("hoge.txt","a")で開き直して追記する。
→オープンに成功したが中身が空であった場合、初の書き込みであると判断してタイトル行と1行目として内容を書き込む。
→オープンに失敗した場合、初の書き込みである為にタイトル行を出力し、1行目として内容を書き込む。

と処理を分岐させます。

名前の前の行番号が必要無い場合、_stat()やPathFileExists()関数で存在確認をしてしまうかもしれません。
    • good
    • 0
この回答へのお礼

解決しました。ありがとうございました。
stat()関数を用いて、ファイルの存在確認を行いました。

お礼日時:2005/12/29 01:45

環境がかかれていないので何ともいえませんが,


C++が使える環境なら以下のようにして出力できます
=============Source=====================
#include <iostream>
#include <fstream>
int main()
{
const char fname[] = "filename.txt";
std::ofstream OUT(fname);
if(OUT){
OUT << "Num Name Address Birthday Sex" << std::endl;
OUT << "1\tHoge1\tTokyo\t1990-1-1\tMale" << std::endl;
OUT << "2\tHoge2\tTokyo\t1990-10-11\tMale" << std::endl;
OUT << "3\tHoge3\tTokyo\t1994-12-1\tFemale" << std::endl;
} else{
std::cout << "Cannot Open File!!" << std::endl;
}
OUT.close();
}

=========================================
==================結果===================
Num Name Address Birthday Sex
1 Hoge1 Tokyo 1990-1-1 Male
2 Hoge2 Tokyo 1990-10-11 Male
3 Hoge3 Tokyo 1994-12-1 Female
(各項目間にはタブが入る)
(\tはタブの意味)

コンパイル,実行済みです。
    • good
    • 0

fopenで、書き出すファイルを"a"で追加モードでオープンして書き出すだけでいいような気がします。

この回答への補足

書き込みありがとうございます。

>fopenで、書き出すファイルを"a"で追加モードでオープンして書き出すだけでいいような気がします。

"a+"にすることで、解決しました。

しかし、"a+"を追加しただけでは、プログラムを実行するたびに以下のようになります。

[今、現在の実行結果]
名前  住所  生年月日 性別
○○○ △△△ ××× □□□
名前  住所  生年月日 性別
○○○ △△△ ××× □□□
名前  住所  生年月日 性別
○○○ △△△ ××× □□□


[理想表示]
名前  住所  生年月日 性別
○○○ △△△ ××× □□□
○○○ △△△ ××× □□□
○○○ △△△ ××× □□□

上記の、理想表示にするためには、どのような方法がありますでしょうか?

よろしくお願いします。

補足日時:2005/12/27 14:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!