#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:
- Jak takie coś z separatorami najlepiej parsować? (jeżeli nie za pomocą fwscanf)
- 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