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

Odczyt polskich znaków z pliku - C

Object Storage Arubacloud
0 głosów
4,195 wizyt
pytanie zadane 17 maja 2017 w C i C++ przez chacken Użytkownik (820 p.)

Witam, mam problem otóż program nie chce odczytać polskich znaków z pliku. Tj. odczytuję znaki i jak je wypisuję to są jakieś krzaki. (screen)

Korzystam z codeblocks, nie mam pojęcia jak zaradzić... zmieniałem jakieś kodowanie i samo kodowanie pliku ale cały czas to samo.


W późniejszym etapie jak już polskie znaki się wczytają, będę musiał je szukać w słowach... więc jak if by wyglądał?
normalnie np.:
litera == "ś"

czy jakieś "znaczki" będę musiał szukać typu 
litera == "%24"

 

1 odpowiedź

0 głosów
odpowiedź 17 maja 2017 przez Wiciorny Ekspert (269,710 p.)
Cześć- Byczku wystarczy troszkę poszukać, troche inaczej to dziala niz  na formacie z UTF-8

http://cpp0x.pl/artykuly/?id=55

 

*zamień cout na wcout, char na wchar_t, string na wstring.
W przed tymi nazwami to jakby nowy standard: UTF-8 w c++
Poczytaj o wchar_t [ poczytaj o tym  ogólnie "w" jako przedrostek standardu UTF w Cpp ]
komentarz 17 maja 2017 przez chacken Użytkownik (820 p.)

Hej, w konsoli tylko kontrolowałem. Mi zależy na tym żeby jak w pliku znajdzie literę np. "ą" albo "ę", to żebym mógł to przeczytać w programie.

Ogólnie zadanie mam takie, stworzyć program działający na listach znajdujący najdłuższe słowo w tekście i zapisujący je do pliku wyjściowego. (dodatkowo jak więcej słów to wypisuje wszystkie najdłuższe i sortuje je).

Najdłuższe słowo właśnie udało mi się ogarnąć. Bez problemu je znajduje, jednocześnie na bieżąco czyszcząc listy "poprzednich" najdłuższych słów.

Teraz implementuję jeszcze sortowanie a->z

Jednak wszystko to działa na zwykłym alfabecie bez ąęść etc.

Czy ten sposób co podałeś też zadziała? Dodam że nie jestem pewny czy mogę wykorzystywać jakieś dodatkowe biblioteki ale jak nie da rady nic innego to chyba można. Może jest coś prostego?

Zczytując litery kolejnych słów zrobiłem coś takiego:
 

while(!feof(file))
		{
			// Pobierz kolejny znak słowa
			letter = fgetc(file);
			if((letter >= 'a' && letter <= 'z') ||
				(letter >= 'A' && letter <= 'Z') ||
				letter == '-' ||
				letter == '_' ||
				letter == 'ś' || letter == 'ą' || letter == 'ę' || letter == 'ć' || letter == 'ż' || letter == 'ó' || letter == 'ź' || letter == 'ł' || letter == 'ń' ||
				letter == 'Ś' || letter == 'Ą' || letter == 'Ę' || letter == 'Ć' || letter == 'Ż' || letter == 'Ó' || letter == 'Ź' || letter == 'Ł' || letter == 'Ń')
			{
				if(word == NULL)
					word = (char*)malloc(sizeof(char) * (++n));
				else
					word = (char*)realloc(word, sizeof(char) * (++n));
				word[n-1] = letter;
			}

I to działa ale dla a->z... niestety z polskimi nie łapie...
idzie jakoś tak to zrobić żeby powyższy kod zadziałał?

komentarz 18 maja 2017 przez Wiciorny Ekspert (269,710 p.)
pobawie się po południu tym i dam Ci znać ! Jak mi poszło
komentarz 18 maja 2017 przez j23 Mędrzec (194,920 p.)

Mi zależy na tym żeby jak w pliku znajdzie literę np. "ą" albo "ę", to żebym mógł to przeczytać w programie.

Zapisz plik w kodowaniu 1250 (domyślne windowsa) Kody źródłowe też powinny być w tym kodowaniu, choć sensowniej byłoby zapisać je w utf-8, a w opcjach kompilatora dać  -fexec-charset=cp1250.

 

Jeśli chodzi o konsolę, czasem wystarczy dać na początku wywołanie setlocale(LC_CTYPE, ".1250");

 

komentarz 18 maja 2017 przez chacken Użytkownik (820 p.)
Wciąż z tym walczę... mam tak głupi problem że szkoda gadać. O ile wpisać w kompilator udało się -fexec-charset=cp1250 to nie mam pojęcia w czym zapisać plik żeby było kodowanie cp1250. W notatniku nie ma, w wordpadzie nie ma, na necie jak szukam to tylko przykłady funkcji z innych języków... wiem śmieszne... dalej szukam ale mówię napiszę w razie czego :P

Druga sprawa jak dodaję na początek:
setlocale(LC_CTYPE, ".1250");
to program nie chce mi się skompilować i dostaję error:
(...)\Projekt\main.c|18|error: expected ')' before string constant|
Sprawdziłem w dokumentacji no i kurde tak się pisze jak jest... no chyba ze coś źle rozumiem.

Kurde co tak ciężko z tymi znakami polskimi ;/
Cały program napisałem i polskie znaki okazały się najtrudniejsze z tego wszystkiego no parodia :P
komentarz 18 maja 2017 przez chacken Użytkownik (820 p.)
edycja 18 maja 2017 przez chacken
ehhh... dobra Notepad++ zapomniałem o takim magicznym narzędziu :P
Zaraz zobaczę czy się uda ;)
edit......
W notepad++ też nie można zapisać w cp1250 ;/
komentarz 18 maja 2017 przez j23 Mędrzec (194,920 p.)

program nie chce mi się skompilować i dostaję error:

Dołącz plik <locale.h>.

komentarz 18 maja 2017 przez j23 Mędrzec (194,920 p.)

W notepad++ też nie można zapisać w cp1250 ;/

Jak nie można? Format -> Konwertuj na format ANSI. Jak masz polskiego Windowsa, kodowanie ANSI to domyślnie CP1250.

Podobne pytania

–1 głos
2 odpowiedzi 5,723 wizyt
pytanie zadane 14 kwietnia 2017 w Java przez Patryk Rafał Bywalec (2,700 p.)
+1 głos
2 odpowiedzi 371 wizyt
+1 głos
1 odpowiedź 509 wizyt
pytanie zadane 1 czerwca 2021 w C i C++ przez drequ Nowicjusz (130 p.)

92,555 zapytań

141,403 odpowiedzi

319,560 komentarzy

61,940 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...