zapisywanie pliku do pliku c++

0

Czy ktoś może mi pomóc przerobić mój program? Siedzę już duuużo czasu nad nim i mi nie wychodzi;/;/ Mam napisać wiadomość w jednym pliku i przekazać ją do drugiego pliku, ale w ten sposób, że małe litery z pliku przekazanego zostaną zamienione na wielkie. Nie wiem jak przepisać to z pliku do pliku... Proszę o pomoc...

#include <cstdlib>
#include <iostream>
#include <fstream>
#include<iomanip>

using namespace std;

void pisz(char *);
void czytajZnaki(char *);
void czytajLinie(char *);
void przepisz(char *, char *);

int main(int argc, char *argv[])
{
    char nazwa[100];
    char nazwa1[100];
    char nazwa2[100];
    cout<<"Podaj nazwe pliku";
    cin>>nazwa;
    pisz(nazwa);
    czytajZnaki(nazwa);
    czytajLinie(nazwa);
    cout<<"Podaj nazwe pliku do przepisania:";
    cin>>nazwa1;
    cout<<"Podaj nazwe pliku, do kterego chcesz przepisac:";
    cin>>nazwa2;
    przepisz(nazwa1, nazwa2);
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
void pisz(char *nazwa)
{
    ofstream plik;
    plik.open("nazwa.txt");
    plik<<"Witaj!"<<endl;
    for(int i=1; i<=10; i++)
    {
            plik<<setw(3)<<i<<".Witaj!"<<endl;
    }
    plik.close();
}
void czytajZnaki(char *nazwa)
{
     ifstream plik(nazwa);
     char znak;
     do
     {
          plik.get(znak);
          cout<<znak;
     }
     while(!plik.eof());
     plik.close();
}
void czytajLinie(char *nazwa)
{
     ifstream plik(nazwa);
     char linia[100];
     do
     {
          plik.getline(linia, 100);
          cout<<linia<<endl;
     }
     while(!plik.eof());
     plik.close();
}
void przepisz(char *nazwa1, char *nazwa2)
{
     ifstream plik1(nazwa1);
     ofstream plik2(nazwa2);
     char znak;
     do
     {
          plik1.get(znak);
          plik2<<znak;
     }
     while(!plik1.eof());
     plik1.close();
     plik2.close(); 
}
0
FILE *fp1, fp2;
fp1 = fopen("tekst_malymi", "w+");
fp2 = fopen("tekst_duzymi", "w+");
char znak; char text[] = "ten tekst zapisze po czym przepisze do drugiego pliku";

fprintf(fp1, "%s", text);
while(fscanf(fp1, "%c", &znak) != EOF) 
    fprintf(fp2, "%c", znak = toupper(znak));

fclose(fp1);
fclose(fp2);
0

Dla mnie to czarna magia jest ;/ Jeśli ktoś mi pomoże, to wstawię się za niego u św. Piotra i dam na mszę w niedzielę=] Mam program: [dev C++]

#include <cstdlib> 
#include <iostream> 
#include <fstream> 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
ofstream plik1; 
plik.open("plik1.txt"); 
plik<<"Witaj!"<<endl; 
plik.close(); 



system("PAUSE"); 
return EXIT_SUCCESS; 
} 

Jak utworzyć plik2 i zawartość pliku1 przepisać w ten sposób, że małe litery zamienić na duże?
Oto program zamieniający małe litery na duże, ale przy podanym znaku:

#include <cstdlib>
#include <iostream>

using namespace std;
char Naduze (char);
int main(int argc, char *argv[])
{
    char znak;
    cout<<"Podaj mala litere"<<endl;
    cin>>znak;
    cout<<Naduze(znak)<<endl;

    system("PAUSE");
    return EXIT_SUCCESS;
}
 char Naduze (char znak)
 {
      return znak-('a'-'A');
      }

Ale jak zrobić to z tekstem, który jest w pliku i jak go przepisać. Czy ktoś mógłby przerobić mi to i wyjaśnić 'jak dla dziecka'? Byłabym BARDZO wdzięczna.
Pozdrawiam:)

0
toupper(); // zamienia na duze

Jak chcesz inaczej to wystarczy dla litery umieszczonej w zmiennej typu char:

if(litera < 91 && litera > 64)
  litera += 32;

Co do tego przepisywania to po prostu otworzylem plik w przykladzie i zapisalem jeden znak do zmiennej char, po czym zamienilem ten znak na duza litere i zapisalem znak do drugiego pliku, robiac wszystko w jednej petli while.

0

Ja dopiero miałam dwa ćwiczenia z plikami;/ i nie studiuję informatyki ;/;/;/;/
fprintf(fp2, "%c", znak = toupper(znak));
printf to chyba w języku c występuje;/ a ja mam c++

fp1 = fopen("tekst_malymi", "w+");
co oznacza w+?

tekst_malymi to tu mam wpisać dowolny tekst a fp2 = fopen("tekst_duzymi", "w+")??

czy nie da się tego zrobić inaczej? ...

0

Ty nie studiujesz, a ja nie mam matury :D
fprintf jest w C oraz C++, sluzy do zapisu odpowiednio sformatowanych danych do pliku, w+ jest to otwarcie pliku do zapisu/odczytu oraz jesli plik nie istnieje to zostanie stworzony.
tekst_malymi to nazwa pliku ;)
Tekst wpisz do tablicy text.
Da sie zrobic na stringach ale jak chcesz zamieniac literki na duze to wydaje mi sie, ze latwiej bedzie na tablicach znakow.

0

Skoro jestes taki madry to czy nie mógłbyś się tą wiedzą podzielić? Tobie na pewno się skompilował program, proszę wkleisz go tutaj? a ja go przeanalizuję, bo inaczej nie potrafię... ;/;/;/;/

0

Niewiem, czy jestem madry ale skoro tak uwazasz...

Lap caly kod, z tym ze w tamtym przykladzie zapomnialem o ustawieniu wskaznika pliku na poczatek po zapisie tekstu, wiec teraz jest do tego funkcja rewind.

#include <iostream>
#include <cstdio>

int main(void) {
	FILE *fp1, *fp2;
	fp1 = fopen("tekst_malymi", "w+");
	fp2 = fopen("tekst_duzymi", "w+");
	char znak; char text[] = "ten tekst zapisze po czym przepisze do drugiego pliku";

	fprintf(fp1, "%s", text);

	rewind(fp1);
	while(fscanf(fp1, "%c", &znak) != EOF) {
		znak = toupper(znak);
	    fprintf(fp2, "%c", znak);
	}

	fclose(fp1);
	fclose(fp2);
	
	return 0;
}
0

DZIĘKI:D Masz u mnie dużego plusa +:) Jestem pod wrażeniem Twojej wiedzy:p Tylko mam jeszcze pytanie: czy mógłbyś mi wyjaśnić fragment kodu:
rewind(fp1); co to oznacza?
i czy w pętli fscanf zajmuje się wczytwaniem znaków?

0

Po zapisaniu tego tekstu do pierwszego pliku musisz przesunac wskaznik aktualnej pozycji w pliku, aby moc czytac dane od poczatku.
Do tego wlasnie jest funkcja rewind.
Moznaby oczywiscie nie robic w ten sposob, ale chcialas najpierw zapisac tekst potem odczytac i zapisac do drugiego pliku, wiec jest tak.
Tak fscanf wczytuje jeden znak do zmiennej znak, a nastepnie po zamianie na duza litere funkcja fprintf pisze ten znak do pliku.
Petla sie bedzie wykonywala dopoki fscanf nie zwroci EOF, czyli nie przeczyta calego pliku.

0

DZIĘKI a czy mógłbyś poprawić http://4programmers.net/Forum/618882?f=2#id618882 próbuję napisać ten program innym sposobem... czy się da?

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