• 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

VPS Starter Arubacloud
0 głosów
1,375 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 (154,780 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 (154,780 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 (154,780 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,280 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 (155,460 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,520 wizyt
0 głosów
1 odpowiedź 1,784 wizyt
pytanie zadane 27 września 2017 w C i C++ przez B0nkers Początkujący (310 p.)
+1 głos
1 odpowiedź 1,283 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...