Leitura em arquivo (C)
01/08/2008
0
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]
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:
Tamanho do wchar_t
Tentativas:
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.
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.
Batoca
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)