- ベストアンサー
テキストデータの修正の方法
現在、C言語の勉強をしています。 習熟度はC/C++の基本的な文法、VC++の入門書を終わらせた程度です。 3つのボタンを持ったストップウォッチを作っています。 テキストデータでデータを保存しています。 そのテキストデータには、行ごとにデータを入れてあります。 (例)ボタン番号、そのボタンを押した回数、秒 1,1,23 (意味)ボタン1,一回目,23秒 2,1,31 3,1,45 1,2,55 : : この場合、データの修正をするときすべての行を読み出し データを一時的に保管し、追加修正して新たに丸々書き直しています。 そこで、指定の行のみを書き直したりする関数や方法があるのか 気になってしまい、投稿させていただきました。 まだまだ初心者で、作るものも小さいので十分だとは思いますが 大きなプログラム等は一から書き直すのも大変なデータがある時は どうするのかきになってしまいました。 ご教授お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>この場合、データの修正をするときすべての行を読み出し >データを一時的に保管し、追加修正して新たに丸々書き直しています。 この2行は、あらかじめ、どこどこが《間違っている》と判っているものを《テキストエディタ》で修正している、ということを言っているんですよね。 ★で、「指定の行のみを書き直したりする関数や方法があるのか」と・・・。 #1回答者さんが、言われるとおり、「指定の行だけを処理する関数はありません」と思います。 ★また、修正が大量にある場合は、他の方はどうしているんだろうと・・・(質問の主旨が、「そんなんじぁない」場合は、以降無視して下さい)。 (私の経験:磁気テープ、80カラムパンチカード時代) (0)まず、何らかの方法(質問者様の例ですと、例えば「秒」は 120 以下であるか)で、修正の必要な疑問データを《プログラム》で《抽出》。 (1)疑問データを基に、修正ファイル(「ボタン番号」、「そのボタンを押した回数」、「修正データ」の並び)を他の資料等から《作成》。 (2)元データと修正データを入力として(「ボタン番号」、「そのボタンを押した回数」をキーに)《プログラム》で《正しいファイルを作成》。 ざっと、こんな流れでした。 カードパンチするのが、テキストエディタで直接修正するだけの違いで、今でも、手作業でするしかないのではないでしょうか。 ★修正しなければならないデータに法則性があれば、この限りではありません。 ★人間はミスをします。元データは、媒体も安くなっていることですし、ずっと保管しましょう。
その他の回答 (1)
- php504
- ベストアンサー率42% (926/2160)
指定の行だけを処理する関数はありません 思いつく方法としてはレコードの長さを固定にして fseek を使うやり方があります。 データ量が少なければ全部読み込み、書き戻しでもいいと思います。 データが多いときはデータベースを使った方がいいですね。
お礼
回答ありがとうございました。 指定の行だけを処理する関数があれば便利だと思ったのですが…。 データベースという言葉は、よく耳にします。 実際にデータベースを扱うプログラムを書いたことがないので これを機会に調べてみたいと思います。 ありがとうございました。また機会がありましたらよろしくお願いします。
お礼
プログラムの学習は完全に独学なので 『他の方はどうやって処理しているんだろう?』 という言葉の連続です。 yama3092さまの回答でデータの修正について大分理解出来ました。 ご回答ありがとうございました。 データの抽出→修正→吐き出し どのような修正でもこの流れがあるのですね。 それが一番知りたかったことだったのでスッキリしました!! これから、指定した行数のみ修正できる関数を作ってみます。 ありがとうございました。 PS 80カラムパンチカードというワードが分からずついつい調べてしまいました(笑