• 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

VPS Starter Arubacloud
0 głosów
4,323 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 (275,640 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 (275,640 p.)
pobawie się po południu tym i dam Ci znać ! Jak mi poszło
komentarz 18 maja 2017 przez j23 Mędrzec (195,220 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 (195,220 p.)

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

Dołącz plik <locale.h>.

komentarz 18 maja 2017 przez j23 Mędrzec (195,220 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,826 wizyt
pytanie zadane 14 kwietnia 2017 w Java przez Patryk Rafał Bywalec (2,700 p.)
+1 głos
2 odpowiedzi 407 wizyt
+1 głos
1 odpowiedź 573 wizyt
pytanie zadane 1 czerwca 2021 w C i C++ przez drequ Nowicjusz (130 p.)

92,843 zapytań

141,782 odpowiedzi

320,858 komentarzy

62,174 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...