2016-04-22 13 views
0

私は大学のプロジェクトに取り組んでいます。私は、テキストファイルの値を見つけて、それを浮動変数に保存した新しい値に置き換える必要があります。問題の一部は、 (例えば、私は0.00の値を検索することができますが、複数のレコードはそのバランスを取ることができます)。テキストファイル内の行を検索して置き換えるにはどうすればよいですか?

テキストファイルがそうのようにレイアウトされています

USERNAME1
Password1という
AccountNo1
バランス1
Jimmy54
FooBar123
13.37
は...

そして、私のコードの関連部分は次のようになります。

ユーザーが自分のユーザー名を入力し、私たちはこれに重要な部分を取得コードで

#include "stdafx.h" 
#include <iostream> 
#include <string> 
#include <fstream> 
using namespace std; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    cout << "Please enter your username:\n"; 
    cin >> enteredName; 

約100行下enteredNameに保管してください質問:

 if (c2 == 1) 
     { 
      //irrelevant to problem 
     } 
     else if (c2 == 2) 
     { 
      float convBal; 
      float deposit; 
      string newBal; 

      convBal = ::atof(ball.c_str()); 

      /* Ball is declared higher up in the code and just contains a 
       value pulled from the text file for the sake of the question 
       we'll say it has a value of 0.00 */ 

      cout << "How much would you like to deposit?:\n"; 
      cin >> deposit; 

      newBal= convBal + deposit; 

      cout << "Your total balance is now: "<< newBal << "\n\n"; 

     } 
} 

それでは、ここから実行する必要があること(13.37)、ファイルを開くenteredNameためのファイルを検索する(このケースでは、我々はJimmy54を言うよ)、その後、3行のユーザー名の下に値を置き換えるです値はnewBalに保存されています

ありがとうございます!申し訳ありませんが、これは愚かな質問のように聞こえる場合は、私はプログラミングに非常に新しいですし、でも新しいC++の

EDIT#1: ここで私が持っているコードはこれまでのところ、それはenteredNameを発見してから3行を取得しています以下:

if (myfile.is_open()) 
{ 
    while (getline(myfile, line)) 
    { 
     if (line.compare(enteredName) == 0) 
     { 
      getline(myfile, line); //Password 
      getline(myfile, line); //Account Number 
      getline(myfile, line); //Balance 
     } 
    } 
} 
myfile.close(); 
+1

何か問題が発生した場合は、何かお書きください。 – stark

+0

@starkこれまでの進捗状況で自分の投稿を編集しましたが、変更する必要がある行が見つかりましたが、変更する方法がわかりません –

+0

ファイルを書くことはエディタで操作するようなものではありません行の長さを増減するとファイルの残りの部分が移動しないため、行を "置き換える"ことはできません。固定サイズのデータ​​を上書きすることはできますが、やりたいことを行う最も簡単な方法は、新しい出力ファイルを開いて行をコピーすることです。 – kfsone

答えて

1

ここに私の問題を解決したコードがありますが、それは少しうっすらですが、動作します!

新しいファイルを読み込んで変更した後、再び書き戻すだけです。

if (myfile.is_open()) 
{ 
    while (getline(myfile, line)) 
    { 
     if (line.compare(enteredName) == 0) 
     { 
      tempFile << enteredName << "\n"; //Username 
      getline(myfile, line); 
      tempFile << line << "\n"; //Password 
      getline(myfile, line); 
      tempFile << line << "\n"; //Account Number 
      getline(myfile, line); 
      tempFile << newBal << "\n"; //Balance 
     } 
     else 
     { 
      tempFile << line << "\n"; //Username 
      getline(myfile, line); 
      tempFile << line << "\n"; //Password 
      getline(myfile, line); 
      tempFile << line << "\n"; //Account Number 
      getline(myfile, line); 
      tempFile << line << "\n"; //Balance 
     } 

    } 
} 
myfile.close(); 
tempFile.close(); 


/* Had to declare these again beacuse the compiler was throwing some bizarre error when using the old declarations */ 
ifstream tempF("TempStore.csv"); 
ofstream mainF("DataStore.csv", ios::trunc); 

//Writes back from TempStore to DataStore with changes made correctly 
if (tempF.is_open()) 
{ 
    while (getline(tempF, line)) 
    { 
    mainF << line << "\n"; //Username 
    getline(tempF, line); 
    mainF << line << "\n"; //Password 
    getline(tempF, line); 
    mainF << line << "\n"; //Account Number 
    getline(tempF, line); 
    mainF << line << "\n"; //Balance 
    } 
} 
tempF.close(); 
mainF.close(); 
関連する問題