• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Odczyt z pliku txt, zapis do pliku binarnego

HackNation - ogólnopolski hackathon
0 głosów
1,951 wizyt
pytanie zadane 3 kwietnia 2017 w C i C++ przez Jedyn Obywatel (1,200 p.)

Witam, mam problem z zadaniem, program ma otwierać plik .bin oraz plik .txt, pobierać dane z txt i zapisywać je do .bin. Ktoś mógłby mi pomóc zrobić taką funkcję?
Napisałem coś takiego ale to nie za dużo ma raczej wspólnego z zapisem do pliku binarnego.
P.S k = ((int)a)-1; jest dla tego, ponieważ w zadaniu mam dekrementować otrzymany znak ASCII o 1.

void test()
{
	ofstream plik("kodowanie.bin", std::ios::binary);
	fstream pliki("dane.txt", std::ios::in);
	int k;
	char a;
	while (pliki.get(a))
	{
		k = ((int)a)-1;
		plik.put(k);
		cout << k << endl;
	}
	plik.close();
	pliki.close();
		

}

 

komentarz 3 kwietnia 2017 przez tangarr Mędrzec (155,140 p.)
Wewnątrz pętli wczytujesz 1 bajt (char) a do drugiego pliku zapisujesz 4 bajty (int)
komentarz 3 kwietnia 2017 przez Jedyn Obywatel (1,200 p.)

Właśnie chciałbym wczytać znak, pobrać jego kod ascii i zapisać binarnie. Czyli jakbym mógł to zrobić?  Coś takiego? :

 

void test()
{
	ofstream plik("kodowanie.bin", std::ios::binary);
	fstream pliki("dane.txt", std::ios::in);
	int k;
	char a;
	while (pliki.get(a))	//przepisuje normalny tekst 
	{
		
		//plik.put(a);
		plik.write((char*)&a, sizeof a);
		cout << a << endl;
	}
	plik.close();
	pliki.close();
		

}

 

komentarz 3 kwietnia 2017 przez tangarr Mędrzec (155,140 p.)
Zapomnij to co napisałem. Funkcja put przyjmuje chara, więc liczba k zostanie obcięta do jednego bajta. Twój pierwszy kod powinien działać.
Plik wynikowy (pomimo że jest plikiem binarny) powinien dać się otworzyć notatnikiem i wyglądać na zwyczajny plik tekstowy.
komentarz 3 kwietnia 2017 przez Jedyn Obywatel (1,200 p.)
Właśnie wygląda jak zwykły tekst, to tak ma być? Z tego co mi mówiono to miały być jakieś krzaczki i ciągle myślę ,że robię gdzieś błąd.
komentarz 4 kwietnia 2017 przez tangarr Mędrzec (155,140 p.)
-1 to zbyt mała różnica, żeby zobaczyć krzaczki. Tylko spacja, tabulacja i nowa linia mogą dać ciekawsze efekty. Dużo ciekawiej by było gdybyś dodał liczbę z przedziału 50-100
komentarz 4 kwietnia 2017 przez mbabane Szeryf (79,260 p.)
edycja 4 kwietnia 2017 przez mbabane

Czesc, dam Ci jeszcze jedna wskazowke:

nazywajac zmienne staraj sie dobierac nazwy tak zeby bylo widac od razu ze jest to inna zmienna - popatrz nazwales zmienne plik oraz pliki  za kazdym razem kiedy sie analizuje kod trzeba wrac do miejsca deklaracji i zerkac, ktora jest ktora, (ewentualnie klopotac glowe tym zeby zapamietac co jest co) a wystarczylo np. cos takiego:
plikTxt, plikBin. 

Odpowiednio nazwane zmienne, procz poprawienia komfortu czytania kodu, znaczaco ulatwiaja poszukiwanie bledu, a nawet moga sie przyczynic do powstawania ich mniejszej ilosci w trakcie tworzenia.

komentarz 4 kwietnia 2017 przez Jedyn Obywatel (1,200 p.)
Tak wiem, po prostu robiłem już kolejną z rzędu podobną funkcje i tak na szybko dodałem tylko i. Normalnie w zadaniach docelowo stosuję anglojęzyczne słowa. Ale dzięki :).

1 odpowiedź

0 głosów
odpowiedź 4 kwietnia 2017 przez mokrowski Mędrzec (158,940 p.)
edycja 4 kwietnia 2017 przez mokrowski

Oj.. "zakałapućkałeś się" :-)

    char ch;
    while(iFile >> ch) {
        oFile << static_cast<char>(--ch);
    }

 

Podobne pytania

0 głosów
0 odpowiedzi 1,988 wizyt
0 głosów
1 odpowiedź 2,640 wizyt
pytanie zadane 27 września 2017 w C i C++ przez B0nkers Początkujący (310 p.)
+1 głos
1 odpowiedź 1,447 wizyt

93,608 zapytań

142,531 odpowiedzi

323,004 komentarzy

63,102 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...