Program w C++ (Operacje na plikach txt)

0

Witam. Mam problem z programem. Pisze program który ma za zadanie wczytywać tekst z pliku aaa.txt, znajdować we wczytanym tekście taki znak "/" a następnie przepisać resztę tekstu do pliku bbb.txt bez owego znaku. Mój problem polega na tym iż nie potrafię zadeklarować instrukcji if która usunie mi ten znak. Umieszczam kod z napisanego programu który działa gdyż wczytuje i przepisuje tekst z jednego pliku do drugiego. Proszę o pomoc. Za wszystkie podpowiedzi z góry dziękuje

#include <iostream>
#include <cstdio>
#include <fstream>
using namespace std;

int main ()
{
 char a;
 ifstream we("C:/Users/Marek/Desktop/aaa.txt"); //otworzenie pliku podstawowego
 if (!we)
 {
  cout << " Nie mozna otworzyc pliku" << endl;  //sprawdzenie pliku
  getchar();
  return 1;
 }

 ofstream wy("C:/Users/Marek/Desktop/bbb.txt"); //utworzenie pliku końcowego
 if (!wy)
 {
  cout << " Nie mozna otworzyc pliku" << endl;  //sprawdzenie pliku
  getchar();
  return 1;
 }

 while (!we.eof())        
 {
  we.get(a);
  if (we) 
  {
   wy.put(a);
  }
  
 }

 
 we.close();
 wy.close();
 cout << "mozna otworzyc plik" << endl;
 getchar();
 return 0;
}
 
0

A dlaczego to if akurat ma Ci "usuwać ten znak"? Czytaj plik normalnie, aż do momentu napotkania pierwszego znaku / - potem czytaj i zapisuj do drugiego pliku.

0
Azrael_Valedhel napisał(a)

Czytaj plik normalnie, aż do momentu napotkania pierwszego znaku / - potem czytaj i zapisuj do drugiego pliku.
. A możesz wyjaśnić to trochę bardziej. Nie wiem jak wczytywać ten właśnie tekst do napotkania tego znaku.

0

Możesz to zrobić w jednej pętli, albo w dwóch - przepisywanie pliku masz już zrobione, tak? Weź tę pętlę i spróbuj wykombinować jak ją zmienić, żeby zatrzymywała się nie gdy plik się skończy, a wtedy gdy wczytany znak to /.

0

Meczę się z tym do tej pory ale po mimo jakichkolwiek prób z pętlą while nie mogę znaleźć odpowiedniego sposobu. Albo program się sypie albo nie przepisuje nic.

0

Moja propozycja na to zadanie:

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    fstream plik ("wczytywanie.txt", ios::in);
    fstream plik2 ("wypisanie.txt", ios::out);
     
    string a;
    
    while(!plik.eof())
    {
      getline(plik, a, '/');                  
      plik2 << a;
    }
    
    system("PAUSE");
    return EXIT_SUCCESS;
} 
0

Mniej więcej coś takiego:

#include <iostream>
#include <fstream>

int main(int argc, char* argv[]) {
    using namespace std;
    if (argc < 3) {
        cerr << "Usage: " << argv[0] << " input_file output_file\n";
    } else {
        ifstream in(argv[1]);
        ofstream out(argv[2]);
        if (in && out) {
            while (in && in.get() != '/') {} // czytaj do końca pliku, albo wczytany znak to '/'
            if (in) {
                int c;
                while ((c = in.get()) != char_traits<char>::eof()) { // czytaj aż do końca pliku
                    out.put(c);
                }
            }
        } else {
            cerr << "Ktorys plik nie mogl byc otwarty!\n";
        }
    }
   
    return 0;
}
0

Wielkie dzięki. Tyle pisania a jak się okazało prosty i krótki program.

0

**Azrael_Valedhel ** Tobie też dziękuję żeś poświęcił czas na ten problem. Ale chodziło mi o to żeby on usuwał ten znak i przepisywał resztę. Dzięki :)

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