Leitura em arquivo (C)

01/08/2008

1

Estou com problemas ao tentar ler alguns dados de um arquivo em C.

Já tentei várias métodos de leitura e já pesquisei durante um tempo razoável, mas sem sucesso (ainda).

Preciso ler caracteres unicode(utf-16) de um arquivo. Estive tentando com wchar_t já que o tipo básico char não é adequado. As linhas de meu arquivo seguem o seguinte padrão de tipo de dados:
[wchar_t][wchar_t][unsigned long]

exemplo: á,1000 ù,566


Observe que o segundo caracter é sempre uma vírgula (´,´).

Sempre que imprimo o que acabei de ler do arquivo, sai caracteres diferentes dos esperados (coloco ´é´ aparece ´Ú´, por exemplo). O unsigned long particularmente não tenho tido problemas.

Vou colocar os trechos principais da leitura aqui, das diversas formas que tentei. Utilizo Dev-C++ 4.9.9.2.

Variáveis:
wchar_t letra, virgula; unsigned long ocorrencia;


Tamanho do wchar_t
printf(´\nTamanho do wchar_t = ¬d´,sizeof(wchar_t)); -- Esse printf me retorna 2(dois)...[bytes ou 16 bits casando com o tamanho do utf-16 (ao menos teoricamente :? )]


Tentativas:
while(!feof(arquivoEntrada)) { fscanf(arquivoEntrada,´¬lc¬lc¬lu\n´, &letra, &virgula, &ocorrencia); printf(´\n ¬lc ¬lc ¬lu ´, letra, virgula, ocorrencia); } --Aqui também já consegui ler sem esse ´\n´, apenas utilizando uma variável auxiliar qualquer para lê-lo. --Os conversores ´lc´ podem ser substitudos por ´C´ (maíusculo).


setlocale(LC_CTYPE, ´´); while (WEOF != (letra = getwc(arquivoEntrada))) { printf(´Char ¬lc´,letra); getchar(); } --Sinceramente, esse setlocale foi puramente experimental.


wchar_t caracteres[2]; //Algum loop aqui... fread(caracteres, sizeof(wchar_t),2,arquivoEntrada); fread(ocorrencia,sizeof(unsigned long),1,arquivoEntrada); --Aqui também já li o ´\n´ e modifiquei bastante quase tentativa e erro :cry:


Também já utilizei o fgetws() e também sem resultados... geralmente tenho alguns problemas inicialmente mas depois que arrumo o código, todos apresentam basicamente a mesma saída. O arquivo (.txt) está no formato Unicode, alguns teste também com ANSI. Provavelmente tem um erro teórico em algum lugar...

Espero que me ajudem ;P

Abraços e agradeço desde já só por ter lido a minha dúvida.


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira