Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ вывод текста на русском

Автор: blackhard 19.03.2008 21:07

Подскажите как корректно вывести содержимое файла если он содержит текст на русском?просто для вывода содержимого файла на экран я написал такую функцию

int outf(FILE *fz,char *s)
{
char c;
if((fz=fopen(s,"r"))==NULL) Error(2,s);
else
{
while(( c=getc(fz))!=EOF)
putchar©;
fclose(fz);
}
return 1;
}
если текст написан латинскими символами все работает отлично.А если на русском то выводит бред ,и то не полностью.как это исправить?

Автор: volvo 19.03.2008 21:33

Компилятор? Кодировка файла? Какой язык установлен в системе для Non-Unicode?

Автор: blackhard 19.03.2008 21:39

Цитата(volvo @ 19.03.2008 17:33) *

Компилятор? Кодировка файла? Какой язык установлен в системе для Non-Unicode?

компилятор vs6 кодировка файла ansi.Какой язык установлен в системе для Non-Unicode? где посмотреть?

Автор: spill 19.03.2008 21:48

Программа запускается под DOS? Если да, то просто установи русификатор (то есть не установи, а запускай каждый раз). Например, rkalt. Ну, они в принципе, друг от друга ни чем не отличаются

Автор: volvo 19.03.2008 22:18

Цитата
где посмотреть?
Панель управления -> Региональные настройки -> последняя вкладка...

Автор: blackhard 19.03.2008 22:23

Цитата(volvo @ 19.03.2008 18:18) *

Панель управления -> Региональные настройки -> последняя вкладка...

установлен русский

Автор: andriano 19.03.2008 22:24

Обычно в Windows используется кодовая страница 1251, в консоли и DOS - 866, а в Unix - КОИ-8.
В виндах кодировка 1251 называется ANSI, а 866 - OEM.

Автор: volvo 19.03.2008 22:25

Читай построчно и конвертируй AnsiToOem:

  char st[255];
...
while((fgets(st, 255, fz))) {
AnsiToOem(st, st);
puts(st);
}

Можешь читать и посимвольно, но тогда для конвертации придется извратиться smile.gif

Автор: blackhard 19.03.2008 22:30

Цитата(volvo @ 19.03.2008 18:25) *

Читай построчно и конвертируй AnsiToOem:

  char st[255];
...
while((fgets(st, 255, fz))) {
AnsiToOem(st, st);
puts(st);
}

Можешь читать и посимвольно, но тогда для конвертации придется извратиться smile.gif

раз уш речь пошла о построчном чтении как мне файл в массив строк записать?
FILE *fz;
char *c[12];
int i=0;
if((fz=fopen("fileini.ini","r"))==NULL) printf("error\n");
else
{
while( (fgets(c[i],256,fz)))
{

i++;

}
}

я пробовал так но оно не работает

Добавлено через 4 мин.
все по поводу построчного чтения я уже разобрался
fgets(v,80,fz);
c[i]=v;
i++;
так работает
блин не правиль работает в каждой строке c[i] одна и таже строка из файла.как правильно сделать вывод?
о все теперь я нашел ошибку все заработало

Автор: volvo 19.03.2008 22:43

Вот так не пробовал:


char* c[10]; // для хранения строк
char st[255]; // буфер для чтения строки из файла

int i = 0;
while((fgets(st, 255, fz))) {
c[i++] = strdup(st);
}


? smile.gif

Автор: blackhard 19.03.2008 22:45

Цитата(volvo @ 19.03.2008 18:43) *

Вот так не пробовал:

char* c[10]; // для хранения строк
char st[255]; // буфер для чтения строки из файла

int i = 0;
while((fgets(st, 255, fz))) {
c[i++] = strdup(st);
}


? smile.gif

да спасибо большое токо что сам так сделал good.gif