• ベストアンサー

テキストデータの修正の方法

現在、C言語の勉強をしています。 習熟度はC/C++の基本的な文法、VC++の入門書を終わらせた程度です。 3つのボタンを持ったストップウォッチを作っています。 テキストデータでデータを保存しています。 そのテキストデータには、行ごとにデータを入れてあります。 (例)ボタン番号、そのボタンを押した回数、秒 1,1,23 (意味)ボタン1,一回目,23秒 2,1,31 3,1,45 1,2,55 : : この場合、データの修正をするときすべての行を読み出し データを一時的に保管し、追加修正して新たに丸々書き直しています。 そこで、指定の行のみを書き直したりする関数や方法があるのか 気になってしまい、投稿させていただきました。 まだまだ初心者で、作るものも小さいので十分だとは思いますが 大きなプログラム等は一から書き直すのも大変なデータがある時は どうするのかきになってしまいました。 ご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#48699
noname#48699
回答No.2

>この場合、データの修正をするときすべての行を読み出し >データを一時的に保管し、追加修正して新たに丸々書き直しています。 この2行は、あらかじめ、どこどこが《間違っている》と判っているものを《テキストエディタ》で修正している、ということを言っているんですよね。 ★で、「指定の行のみを書き直したりする関数や方法があるのか」と・・・。 #1回答者さんが、言われるとおり、「指定の行だけを処理する関数はありません」と思います。 ★また、修正が大量にある場合は、他の方はどうしているんだろうと・・・(質問の主旨が、「そんなんじぁない」場合は、以降無視して下さい)。 (私の経験:磁気テープ、80カラムパンチカード時代) (0)まず、何らかの方法(質問者様の例ですと、例えば「秒」は 120 以下であるか)で、修正の必要な疑問データを《プログラム》で《抽出》。 (1)疑問データを基に、修正ファイル(「ボタン番号」、「そのボタンを押した回数」、「修正データ」の並び)を他の資料等から《作成》。 (2)元データと修正データを入力として(「ボタン番号」、「そのボタンを押した回数」をキーに)《プログラム》で《正しいファイルを作成》。 ざっと、こんな流れでした。 カードパンチするのが、テキストエディタで直接修正するだけの違いで、今でも、手作業でするしかないのではないでしょうか。 ★修正しなければならないデータに法則性があれば、この限りではありません。 ★人間はミスをします。元データは、媒体も安くなっていることですし、ずっと保管しましょう。

ysk_diana
質問者

お礼

プログラムの学習は完全に独学なので 『他の方はどうやって処理しているんだろう?』 という言葉の連続です。 yama3092さまの回答でデータの修正について大分理解出来ました。 ご回答ありがとうございました。 データの抽出→修正→吐き出し どのような修正でもこの流れがあるのですね。 それが一番知りたかったことだったのでスッキリしました!! これから、指定した行数のみ修正できる関数を作ってみます。 ありがとうございました。 PS 80カラムパンチカードというワードが分からずついつい調べてしまいました(笑

その他の回答 (1)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

指定の行だけを処理する関数はありません 思いつく方法としてはレコードの長さを固定にして fseek を使うやり方があります。 データ量が少なければ全部読み込み、書き戻しでもいいと思います。 データが多いときはデータベースを使った方がいいですね。

ysk_diana
質問者

お礼

回答ありがとうございました。 指定の行だけを処理する関数があれば便利だと思ったのですが…。 データベースという言葉は、よく耳にします。 実際にデータベースを扱うプログラムを書いたことがないので これを機会に調べてみたいと思います。 ありがとうございました。また機会がありましたらよろしくお願いします。

関連するQ&A

  • PHPを使用したデータの修正・上書き方法

    はじめまして。 当方、PHPを学習しはじめて1ヶ月の初心者です。 ですので、ご質問させくていただく内容も説明も拙いものかと存じますが、よろしくお願いいたします。 以下のようなページを作成するという問題で、入力保存したデータを修正しテキストに上書きするという操作につまずき途方にくれております。 1.データ入力画面 →a,b,c,d,のテキストボックスに任意に入力 2.登録画面 →テキストファイルに行単位で"a"モードで保存($data=$a."'".$b.",".$c."'".$d."\n") 3.検索・修正値入力画面 →aの値を検索し、付随するb,c,dをでテキストボックス内に表示。(テキストボックス内は修正可) 4.上書き登録 上記の4の工程をどのようにしていったらいいのでしょうか。 自力でたどり着いたのは・・・ 「3で修正した値を新たな名前(new_aなど)でPOSTでうけとり、$aと$new_aが一緒のとき・・・」 までです。(情けない・・・) 模索中は以下になります if($a==$new_a) {$data=$new_a."'".$new_b."'".$new_c."'".$new_d."\n" } else {$data=$data} その後テキストファイルを"w"モードで開きputs closeでは?と しかし、この方法でいくと修正した箇所a[0]はなおっても、修正しなかったほかの行のデータa[1]やa[2]がきえます。 どのように考え、スクリプトをかいていけばいいのでしょうか? よろしくお願いもうしあげます。

    • ベストアンサー
    • PHP
  • テキストデータ 構造体 入出力

    テキスト(何が入っているか分からない)データの内容を構造体に格納して、格納された構造体の内容を画面に表示するのは可能でしょうか? C言語でソフトはVCです。 宜しくお願いします。

  • WSHでテキストファイルの修正

    WSHであるファルダしたのテキストファイルの修正をしたいです。 テキストファイル中に 文字「データファイルを送付します」が有る行の後の行の内容を削除したいです。 WSHサンプルが欲しいです。 お願いします。

  • C言語 テキストデータの読み込み方法をお願いします

    C言語初心者です。 以下の小数値のみデータ(*.txt)を読み込みたいのですが、 うまくいきません。 よろしくお願いします。 2010/4/28 11:44,984000,-142.160004 2010/4/28 11:44,984100,-141.869995 2010/4/28 11:44,984200,-142.580002 ・ ・ ・ ・ 60000行

  • テキストデータの読み込みについて

    C言語のテキストデータの読み込みについてです。 C言語のプログラムについてです。 2444,1114,2807, 1984,2845,2086, 658.1,-1564.0,1239.7, -102.0,958.4,123.1, 12.7,6.0,82.7 2439,1110,2802, 1973,2865,2108, 658.8,-1563.7,1239.6, -102.0,957.1,121.9, 12.8,6.0,82.7 2441,1106,2806, 1967,2888,2124, 659.4,-1563.5,1239.5, -102.2,956.4,121.0, 12.8,6.1,82.8 2440,1109,2808, 1964,2896,2127, 660.0,-1563.3,1239.4, -102.7,956.2,120.7, 12.8,6.1,82.8 2441,1112,2807, 1981,2894,2120, 660.6,-1563.0,1239.4, -103.3,956.2,120.1, 12.8,6.1,82.8                                       ↑ 上の様なカンマとスペースで15個に区切られているtxtファイルがあるのですが、このtxtデータの10コ目と11コ目をを計算で使いたく、取り出したいと考えているのですがscanfを使いどのように取り出すことが出来るのか、また取り出したデータから数値を引くことを教えて頂きたいです。 つまり -102.0   958.4 -102.0   957.1 -102.2 と 956.4 -102.7   956.2 -103.3   956.2,             を取り出して計算に使いたいです。 そして1番上の数値だと、 -102.0と958.4 を読み込み、例えばそれぞれ100を引いた値を配列に入れたいです。 -102.0と958.4 → -202.0 と 858.4 のように取り出したいです。 教えて頂きたいです。お願いします。

  • テキストからExcelへ 良い方法ないですか?

    お世話になります。 テキストファイルで、 {0xff,0x00}, のような形のデータが数百行あります。(分る人には分るでしょうが、C言語ソースです。) これをExcelにコピーしたいのですが、{ }とコンマをとって 0xff(左側)と0x00(右側)を別々の列に入れたいのです。 何かうまい方法はないでしょうか。よろしくお願いします。 Excelは2000です。

  • テキストファイルのデータの追加

    二つのテキストファイルを結合というより新規のデータだけを追加したいのですが、そのようなコマンドはあるのでしょうか? 今は copy a.txt+b.txt c.txt copy c.txt b.txt を動かした後、テキストbを開いてテキストaとテキストbの重複しているデータを手作業で消しています。 また、上の2行のコマンドを1行にすることは可能でしょうか?

  • テキストデータとは

    コンピュータの世界で、実務上一般的にテキストデータと言われるのは 、例えば、エクセルで言えば表示されているものつまり最も表層状に現れている文字のことでよろしいのでしょうか?これが、例えばC言語の プログラム作成なら、エディタ上に表示されている文字列等という認識になるのでしょうか?変な質問かも知れませんが、一般的にオフィス上でテキストデータに変換した場合あくまでそのソフトが処理する文字列の集まりという認識でよろしいのでしょうか。

  • ButtonコントロールのText

    VS2005を使用しています。 言語は主にVC#,VC++です。 ButtonコントロールのTextで表示する文字列を2行にしたいのですが、 どうにかして改行させることはできないでしょうか? 今はスペースを入れて強引に二行になるようにしていますが、 \nのように改行コードなどで設定できると便利ですよね。。。 もし、そのような小技をご存知の方がいらっしゃれば、 ご教授願います。

  • テキストファイルの任意の行からのデータ書き込み

    C++Builder5.0(Professional)でテキストファイル 書き込みのプログラムを作成しています。 あるテキストファイルがあり、そのファイルの 1,2行目にはすでにテキストデータが書き込まれている ものとします。 このテキストファイルを開き、4行目から 10行目までデータを書き込むといったプログラムは どの様に作成すればよろしいでしょうか。 御回答を宜しくお願いします。

専門家に質問してみよう