Jak zamienić jedna linijkę pliku tekstowego

0

witam mam o to taki programik(w C++) i potrzebuje aby edytował tylko jedna linijkę w pliku tekstowym

// bankomat by Jacek Horn
 
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <string>
#include <fstream>
#include <stdlib.h>
 
 
using namespace std;
 
struct os
{
        int ID;
        string imie;
        string nazwisko;
        float suma;
 
};
 
void wypisz (char *in, os *s, int n )
{
    ifstream plik;
        plik.open(in);
//        int i=0;
//        while (!plik.eof()){
 
    for(int i=0;i<n;++i){
                plik>>s[i].ID;
                plik>>s[i].imie;
                plik>>s[i].nazwisko;
                plik>>s[i].suma;
    }
 
    plik.close();
}  
 
void czytanie(char *in,os *s,int n) // zszyczytuje plik do tablicy struktur
{
        ifstream plik;
        plik.open(in);
 
        for(int i=0;i<n;++i)
        {
                plik>>s[i].ID;
                plik>>s[i].imie;
                plik>>s[i].nazwisko;
                plik>>s[i].suma;
 
        }
}
 
int wielkosc(char *in)
{
        int ID;
        string imie, nazwisko;
 
        ifstream plik;
        plik.open(in);
        int rozm = 0;
 
        while(!plik.eof())
        {
                plik>>ID;
                plik>>imie;
                plik>>nazwisko;
 
                rozm += 1;
        }
 
        plik.close();
        return rozm;
}
 
void dodawanie(char *in,os *s,int n) // dodawanie uzytkownika
{
        ofstream plik;
        plik.open(in, ios::app);
        n=1;
        for(int i=0;i<n;++i)
        {
                s[i].ID = i + 1;
                plik<<s[i].ID<<endl;
                cout<<"Podaj imie :\n";
                cin>>s[i].imie;
                plik<<s[i].imie<<endl;
                cout<<"Podaj nazwisko :\n";
                cin>>s[i].nazwisko;
                plik<<s[i].nazwisko<<endl;
        }
        plik.close();
}
 
 
 
void wyswietl(char uzytko[])    //wczytywanie listy uzytkownikow
{
ifstream plik("uzytkownik.txt"); //otwarcie pliku
string tymczasowa; //zapisywac bedziesz do klasy String
if(!plik.is_open())
cout <<"Nie otwarto pliku!";
 
while(getline(plik, tymczasowa)) //sczytywanie linijka w linijkę
cout << tymczasowa<< endl;
plik.close();
}
 
//-----------------------------------------------------------------------
 
int main(int argc, char **argv)
{
        int op,wp,wy,adm,ile=1,i;
        char uzy[4000];
        string uz,nowy,nowyw,usun,s,de;
 
        /* cout << "mamy " << argc << " argumentow" << endl ; 
  for (int i=0; i<argc; i++)
  cout << argv[i] << " ";
 
 
 
cout << " podaj nazwe pliku";
char nazwa_pliku[20];
cin >> nazwa_pliku;
argv[1]= nazwa_pliku;*/
 
        argv[1]="uzytkownik.txt";
        fstream uzyt;
        cout << "podaj ID" << endl;
                cin >> uz;
        if (uz=="a")
        {
        cout << "witam administratorze prosze wybrac opcje" << endl;
        cout << "1 - dodawanie uzytkownikow" << endl;
        cout << "2 - usuwanie wszystkich uzytkownikow" << endl;
        cout << "3 - wyswietlanie listy uzytkownikow" << endl;
        cin >> adm;
 
        switch(adm)
        {
                case 1:
                        {
                        int roz = wielkosc(argv[1])+ile-1;
                        int rozm = wielkosc(argv[1])-1;
 
 
                        os *s = new os [roz];
                        czytanie(argv[1],s,rozm);
 
                        for(int i=rozm;i<roz;++i)
                        {
                                s[i].ID = i+1;
                                cout<<"Podaj imie :\n";
                                cin>>s[i].imie;
                                cout<<"Podaj nazwisko :\n";
                                cin>>s[i].nazwisko;
                                cout<<"Podaj stan konta :\n";
                                cin>>s[i].suma;
                        }
 
                        ofstream plik;
                        plik.open(argv[1]);
                        for(int i=0;i<roz;++i)
                        {
                                plik<<s[i].ID<<endl;
                                plik<<s[i].imie<<endl;
                                plik<<s[i].nazwisko<<endl;
                                plik<<s[i].suma<<endl;
                                plik<<"\n\n";
                        }
                        plik.close();
                        delete [] s;
                        }
 
                        break;
                case 2:
                        cout << "czy na pewno chcesz usunac wszystkich uzytkownikow?" << endl;
                        cin >> de;
                        if (de=="t")
                        system("del W:\\Pulpit\\bankomat\\bankomat\\uzytkownik.txt > NUL");
                        else
                                cout << "nie usunieto uzytkownikow" << endl;
                        break;
                case 3:
                        uzyt.open("uzytkownik.txt");
                        wyswietl(uzy);
                        uzyt.close();
                        break;
                /*case 4:                                //dodawanie pierwszego uzytkownika
                          os *s = new os[ile];
              dodawanie(argv[1],s,ile);
              delete [] s;
              break;*/
 
        }
        }
        //-----------------------------------------------------------------------------        
else
{
    cout << "Podaj ID po raz drugi dla uwierzytelnienia" << endl;
          os *s = new os[ile];
              czytanie(argv[1],s, ile );
 
              int mod, licznik=0;
              cout << endl <<"ID" << endl;
              cin >> mod;
 
              for(i=0;i<ile;++i){
                      if (s[i].ID==mod) licznik++; break;
                      }
                                        if (licznik==0) licznik=1;
                                        else licznik=2;
                     switch(licznik)
                                         {
                                                 case 1: 
                                                        cout<<"nie ma takiego uzytkownika"<< endl;
                                                        break;
                                                 case 2:
                                                         {
//Dokończyć-----------------------------------------------------------------------------------------
        cout << "1 - wplata na konto" << endl;
        cout <<        "2 - wyplata z konta"        << endl;
        cout <<        "3 - sprawdzenie stanu konta" << endl;
   cin >> op;
        switch(op)
        {
                case 1:
 
                                cout << "podaj ile chcesz wplacic" << endl;
                                cin >> wp;
                                s[i].suma+=wp;
 
                        break;
                case 2:
                                cout << "podaj ile chcesz wyplacic" << endl;
                                cin >> wy;
                                if (s[i].suma<0) 
                                        cout << "masz debet na koncie, wyplata nie jest mozliwa" << endl;
                                else 
                                        cout << "wyplacono pieniadze" << endl;
                        break;
                case 3:
                        cout << "twoj stan konta wynosi: "<<s[i].suma << endl;
                        break;
        }
                                                         }
                                         }
}
 
        getch();
    return 0;
} 

muszę zrobić case 1 i 2 w switch op w tych dwóch casach ma edytować tylko jedną linijkę z pliku uzytkownik.txt da ktoś jakieś rady ewentualnie dokończy??

0

Jeżeli nowa linijka jest dokładnie tej samej długości co stara to się da.
Natomiast jeżeli nie to jedyny sposób stworzenie nowego pliku, skasowanie starego i przemianowanie nowego.

0
_13th_Dragon napisał(a):

Jeżeli nowa linijka jest dokładnie tej samej długości co stara to się da.

A jak to zrobić?

0

Czytasz plik wiersz po wierszu do tego wiersza który chcesz zamienić i te wiersze po wczytaniu zapisujesz do nowego pliku.
Wczytujesz z pliku wiersz który trzeba zamienić a do nowego wpisujesz nową wersję tego pliku
Czytasz plik wiersz po wierszu do końca i te wiersze po wczytaniu zapisujesz do nowego pliku.
Usuwasz plik.
Przemianowujesz nowy plik.

1 użytkowników online, w tym zalogowanych: 0, gości: 1