C++ Menemukan baris dari file teks dan memperbarui/menulis baris

Saya memiliki file rekening bank yang dapat dibaca oleh program. Fungsi ini berfungsi sampai sekarang dengan penggunaan ifstream. Tapi saya ingin program membaca baris ke-6 dari file teks (yang memiliki nilai 'saldo') dan kemudian memperbaruinya sesuai kebutuhan (hapus dan ganti dengan nilai baru).

Saya menggunakan loop for untuk menemukan lintasan melalui garis. Namun bagaimana cara memperbarui bila diperlukan? (Penarikan dan penyetoran uang memperbarui saldo)

Ini adalah kode yang saya miliki saat ini:

ifstream file;
string line;
file.open ("accounts.txt", ios::in); 

for(int i = 0; i < 6; ++i)    //6 being the 6th line
      {
         getline(file, line);
      }

Apa yang terjadi selanjutnya? Terima kasih :)


person PJ_Boy    schedule 25.05.2013    source sumber
comment
Seberapa besar ukuran file Anda?   -  person itsols    schedule 25.05.2013
comment
Ini adalah file teks kecil, dengan sekitar 10 baris   -  person PJ_Boy    schedule 25.05.2013


Jawaban (1)


Jika file Anda sangat kecil seperti yang Anda sebutkan, Anda dapat memasukkannya ke dalam array string (satu elemen per baris teks). Kemudian buat perubahan pada array dan tulis ulang seluruh array kembali ke file.

Misalnya, Anda bisa membacanya menjadi arrya seperti ini:

//assuming you've defined the array A
for(int i = 0; i < 6; i++)    //NOTE: I've changed the loop counter i
      {
         getline(file, line);
         A[i] = line;
         cout << A[i] < "\n"; //This is the NEW LINE I wanted you to put
         //If the ABOVE line gives nothing, you ought to check your TXT file.
      }
//Change line 6
A[5] = "555.00";
//Now reopen the file to write
ofstream Account ("accounts.txt");
if (Account.is_open())
  {
    for(i=0;i<6;i++)
       {//NOTE THAT I HAVE INCLUDED BRACES HERE in case you're missing something.
        Account << A[i] << "\n"; //Loop through the array and write to file
       }
    Account.close();
  }

Saya tidak mengujinya tetapi menurut saya tidak apa-apa. Kode lainnya: Jika Anda menambahkan sedikit kode berikut di akhir kode utama, Anda akan melihat konten dari array. Dan jika ini tidak menunjukkan apa pun, itu jelas berarti file Anda KOSONG.

for(int i = 0; i < 6; i++)
   {
    cout << A[i] < " This is a row with data\n";
   }

Catatan: Meskipun saya ingin membantu Anda dalam MENJELASKAN permasalahan di forum ini, saya pikir pertanyaan ini melampaui sifat forum ini. Mungkin yang Anda perlukan adalah meluangkan waktu mempelajari seni loop dan struktur lainnya :)

person itsols    schedule 25.05.2013
comment
MASALAH: Menghapus setiap nilai di A[1] hingga 6 dan hanya menulis nilai 6. Lainnya kosong - person PJ_Boy; 25.05.2013
comment
Itu konsep yang bagus, kalau saja tetap menjaga nilai-nilai A[1] yang ada dan sisanya tanpa menghapus? - person PJ_Boy; 25.05.2013
comment
@PJ_Boy Mungkin ada kesalahan dalam kode Anda. Bisakah Anda menunjukkan kepada saya kode di loop for kedua Anda? Paste saja di ruang komentar ini - person itsols; 25.05.2013
comment
for(int i = 0; i ‹ 6; ++i) //6 menjadi baris ke-6 { getline(file, line); A[i] = garis; } A[5] = garis; } Akun ofstream (accounts.txt); if (Akun.is_open()) { for(int j=0;j‹6;j++) Akun ‹‹ A[j] ‹‹ \n; //Ulangi array dan tulis ke file Account.close(); } - person PJ_Boy; 25.05.2013
comment
Sial, semuanya diacak di komentar - person PJ_Boy; 25.05.2013
comment
oke, langkah pertama, buka file teks Anda menggunakan editor apa saja dan periksa apakah benar-benar ada data pada 6 baris pertama. Langkah kedua: di loop PERTAMA tempat kita menyimpan teks dalam array, Segera setelah kita memasukkan teks ke dalam array, keluarkan elemennya. Ini akan menunjukkan kepada kita apakah infonya ada di dalamnya atau tidak. Kalau begitu beri tahu aku... - person itsols; 25.05.2013
comment
Satu hal lagi: Jangan gunakan ++i di loop. Lebih baik ubah menjadi i++ - person itsols; 25.05.2013
comment
Saya memperbarui kode Anda, memeriksanya dan beri tahu saya jika kode tampilannya benar? Pak, itu tidak menampilkan apa pun - person PJ_Boy; 25.05.2013