Форум программистов, компьютерный форум CyberForum.ru

Программа не обрабатывает текст из файла с кодировкой, отличной от ANSI - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Реализовать функцию, которая осуществляет циклический побитовый сдвиг вправо на n позиций http://www.cyberforum.ru/cpp-beginners/thread877495.html
Реализовать функцию, которая осуществляет циклический побитовый сдвиг вправо на n позиций. При циклическом сдвиге вправо на 1 все биты сдвигаются относительно разрядной сетки на одну позицию, а младший бит занимает место старшего. Циклический сдвиг вправо на n позиций – это n сдвигов вправо на 1 позицию. Функция должна принимать в качестве первого параметра переменную типа unsigned int, в...
C++ Разложение Шеннона по таблице истинности Большая просьба, как на С++ можно реализовать Разложение Шеннона для ДНФ по всем переменным? Помогите, плиз. http://www.cyberforum.ru/cpp-beginners/thread877494.html
strcmp C++
slovo={'d','d','d'}; char *slovo2=new char; for(int i=0;i<k;i++) { cin>>slovo2; } int s=strcmp(slovo2,slovo); и ввожу d,d,d; почему в переменной s не 0??? в документации написано что она 0 должна возвр. при равных массивах. помогите!
C++ Компиляция dll библиотеки
Как правильно скомпилировать dll библиотеку, чтобы имена методов не изменялись? Например, у меня есть метод с именем Java_Test_test, а после компиляции в библиотеке его имя уже меняется на Java_Test_test@8 компилирую командой g++ -x c++ -shared -I "C:\Program Files\Java\jdk1.7.0_02\include" -I "C:\Program Files\Java\jdk1.7.0_02\include\win32" -o Test.dll Test.cpp Заголовочный файл /* DO NOT...
C++ Палиндром http://www.cyberforum.ru/cpp-beginners/thread877490.html
разработать программу которая определяет является ли данный текст палиндромом в среде C++
C++ Разобрать код с++ Всем доброго времени суток. Дело такое нужно разобрать код явных ошибок нету но при компиляции вижуалка вылетает с ошибкой вроде в хидере не выделяется память под элемент values но точно отследить ошибку не могу прошу вас о помощи всем кто откликнется огромное спасибо. Вот код спипишника #include "stdafx.h" #include <stdlib.h> #include <iostream> #include <math.h> #include <time.h> #include... подробнее

Показать сообщение отдельно
niks255
1 / 1 / 0
Регистрация: 21.05.2013
Сообщений: 29
24.05.2013, 23:12  [ТС]     Программа не обрабатывает текст из файла с кодировкой, отличной от ANSI
Выложу под спойлерами.
Файл Task 7.7.cpp
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
// Task 7.7.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <string>
#include <stdlib.h>
#include <iostream>
#include "edit.h"
using namespace std;
 
/// глобальные переменные
const int maxl_line=63;
const int margin=5;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    FILE* finp;
    FILE* fout;
    char line[maxl_line+1];
    int b_i, a_i, start, next, inter;
    int nword = 0;
    cout<<"Работает программа Task 7.7"<<endl;
    if (!(finp=fopen("unform.txt", "r")))
    {
        cout<<"Файл не найден"<<endl;
        exit(0);
    }
    cout<<"Читается файл unform.txt"<<endl;
    if (!(fout=fopen("formatd.txt", "w")))
    {
        cout<<"Файл formatd.txt не создан"<<endl;
    }
    cout<<"Выполняется запись в файл formatd.txt"<<endl;
    while(GetLine(finp, line))
    {
        DefInter(line, b_i, a_i, inter);
        PutInterval(fout, margin);
        next=PutWord(fout, line, 0, nword);
    
        for (int i=0; i<inter; i++)
        {
            start=SearchNextWord(line, next);
            PutInterval(fout, b_i);
            if (a_i) {a_i--;PutInterval(fout, 1);}
            next=PutWord(fout, line, start, nword);
            if (!next) break;
        }
        fprintf(fout, "\n");
    }
    printf("\nКоличество слов - %d\n", nword);
    fclose(fout);
    cout<<"Работа завершена"<<endl;
    system("pause");
    return 0;
}

Файл edit.h
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
// Прототипы функций
void DefInter(const char* pline, int& base_int, int& add_int, int& inter);
int GetLine(FILE*, char*);
void PutInterval(FILE*, const int);
int PutWord(FILE*, const char*, const int, int&);
int SearchNextWord(const char*, const int);
// глобальные переменные
extern const int maxl_line;

Файл edit.cpp
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <stdio.h>
#include "StdAfx.h"
#include <string>
#include "edit.h"
 
int GetLine(FILE* finp, char* pline)
 
{
    int i=0;
    char c;
    while ((c=fgetc(finp))==' ') i++;
    if (c == EOF)
        return 0;
    fseek(finp, -1, SEEK_CUR);
    fgets(pline, maxl_line - i+1, finp);
        pline[strlen(pline) - 1] = 0;
        return 1;
}
 
int SearchNextWord(const char* pline, const int curpos)
 
{
    int i = curpos;
    while(pline[i] != ' '){
        if (pline[i] == '\n') return 0;
        i++;
    }
    while (pline[i] == ' ' && pline[i+1] == ' ') i++;
    return i+1;
 
}
 
void DefInter(const char* pline, int& base_int, int& add_int, int& inter)
{
    int k = 0, end;
    end = strlen(pline) - 1;
    while ((pline[end] == ' ') || (pline[end] == '\n') || (pline[end] == '\r')) end--;
    inter = 0;
 
for (unsigned int i = 0; i < end; i++)
{
    if (pline[i] == ' ')
    {
        k++;
        if (pline[i+1] != ' ') inter++;
    }
}
int blank_amount = k + maxl_line - end;
if (!k)
{
    base_int = 0;
    add_int = 0;
}
else
{
    base_int = blank_amount / inter;
    add_int = blank_amount % inter;
}
return;
}
 
int PutWord (FILE* fout, const char* pline, const int startpos, int& n){
 
    int i = startpos;
    char c;
 
    n++;
    while ((c = pline[i++]) != ' ')
    {
        fprintf(fout, "%c" ,c);
        if ((c == '\n') || (c == '\0')){i = 0; break;}
    }
    return i - 1;
}
 
    void PutInterval(FILE* fout, const int k)
    {
        for (int i = 0; i < k; i++) fprintf(fout, " ");
        return;
    }


Добавлено через 11 минут
Цитата Сообщение от Olivеr Посмотреть сообщение
Вот в формате *.rar
кстати, у меня всё заработало, в файл formatd.txt записалась нормальная кириллица
может проблема в винде?
Там проблема не с кириллицей. Кириллицу он пишет, но только если в исходном документе кодировка ANSI. Если UTF-8 например, то кракозябры пишет в конечный файл. Создаю файл в блокноте. Тут в соседнем форуме подсказали что блокнот не лучшее средство для таких дел т.к. он что то с документом не то вытворяет. Но код надо бы проверить.
Винда Windows 7 x64.
 
Текущее время: 20:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru