Parsowanie pliku z przecinkami wchar_t

0
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <errno.h>

/* PLIK:
Marcin Nowak;;R203
Jan Kowalski;;R500
Magda Konieczna;;T444
Andrzej Szymański:;L442
Edward Ącki;;C555
*/

#define LINE_MAX	32
void file_parse(const char *filename) {
	FILE *fp = fopen(filename,"r");
	if(!fp) {
		fprintf(stderr,"%s: %s\n",strerror(errno),filename);
		exit(EXIT_FAILURE);
	}
	wchar_t *n = malloc(LINE_MAX * sizeof(wchar_t));
	wchar_t *g = malloc(LINE_MAX * sizeof(wchar_t));

	while(fwscanf(fp,L" %32[^';;'];;%32ls",n,g) == 2)
		wprintf(L"%ls %ls\n",n,g);

	free(n);
	free(g);
	fclose(fp);
}

int main(int argc,char *argv[]) {

	if(argc != 2) {
		fprintf(stderr,"Usage: %s filename\n",argv[0]);
		exit(EXIT_FAILURE);
	}

	file_parse(argv[1]);

	return 0;
}

Mam plik wszystko było dobrze, ale pojawiły się polskie znaki. Wszystko zostało zmienione na wchar_t, ale niestety w przeciwieństwie do fscanf to fwscanf jakoś tego nie daje rady i otrzymuję:

??? R203
??? R500
???? T444

2 pytania:

  1. Jak takie coś z separatorami najlepiej parsować? (jeżeli nie za pomocą fwscanf)
  2. Jak parsować to z polskimi znakami (żeby działało UNICODE).

EDIT:
3. Zastanawiało mnie jak to możliwe, że fscanf przy char daję radę a fwscanf przy wchar_t nie.

Dzięki

0

Wczytaj cały wiersz, w pamięci sobie podziel.

0

Jaki kompilator, system i w jakim kodowaniu jest plik?

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