Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848

Компрессия данных (вообще не понимаю ошибку)

10.05.2022, 21:08. Показов 2425. Ответов 24
Метки с++ (Все метки)

Студворк — интернет-сервис помощи студентам
Кликните здесь для просмотра всего текста

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
struct UnikSerii
{
    string Seriya;
    int ProcUp;
    int ProcDown;
 
};
 
int main()
{
    setlocale(0,"ru");
    ifstream DataFile("DataOfSeriya 01_05_2010 01_05_2022 SHAG_050.TXT");
    ofstream CompressedFile("DataOfSeriya 01_05_2010 01_05_2022 SHAG_050 Compressed.TXT");
 
    
 
    UnikSerii CompressedSerii[200];
 
    for (int i = 0; i < 200; i++)
    {
        CompressedSerii[i].Seriya = "";
        CompressedSerii[i].ProcUp = 0;
        CompressedSerii[i].ProcDown = 0;
    }
 
 
    int WriteUnik = 0;
 
 
    string DataLine;
 
    cout << "Пробую открыть файл с данными " << endl;
 
    if (!DataFile)
    {
        cout << "Не могу открыть файл\n";
    }
    else
    {
        cout << "Файл открыт\n";
    }
 
    for (int i = 1; !DataFile.eof(); i++)
    {
        getline(DataFile,DataLine);
        cout << DataLine << endl;
 
        if (WriteUnik == 0)
        {
            if (DataLine[0] == '1')
            {
                CompressedSerii[WriteUnik].ProcUp += 1;
            }
            if (DataLine[1] == '1')
            {
                CompressedSerii[WriteUnik].ProcDown += 1;
            }
            for (int i = 2; i < 22; i++)
            {
                CompressedSerii[WriteUnik].Seriya += DataLine[i];
            }
            WriteUnik += 1;
        }
        else
        {
            bool haveSeriya = false;
            string checkSeriya = "";
            int NumberSeriya;
            for (int i = 2; i < 22; i++)
            {
                checkSeriya += DataLine[i];
            }
 
            for (int i = 0; i < WriteUnik; i++)
            {
                if (checkSeriya == CompressedSerii[i].Seriya)
                {
                    haveSeriya = true;
                    NumberSeriya = i;
                }   
            }
 
            if (haveSeriya == true)
            {
                if (DataLine[0] == '1')
                {
                    CompressedSerii[NumberSeriya].ProcUp += 1;
                }
                if (DataLine[1] == '1')
                {
                    CompressedSerii[NumberSeriya].ProcDown += 1;
                }
            }
            else
            {
                if (DataLine[0] == '1')
                {
                    CompressedSerii[WriteUnik].ProcUp += 1;
                }
                if (DataLine[1] == '1')
                {
                    CompressedSerii[WriteUnik].ProcDown += 1;
                }
                for (int i = 2; i < 22; i++)
                {
                    CompressedSerii[WriteUnik].Seriya += DataLine[i];
                }
                WriteUnik += 1;
            }
        }
    }
 
    for (int i = 0; i < 200; i++)
    {
        string NewWrite = "";
        NewWrite += CompressedSerii[i].Seriya;
        NewWrite += " ";
        NewWrite += CompressedSerii[i].ProcUp;
        NewWrite += " ";
        NewWrite += CompressedSerii[i].ProcUp;
 
        CompressedFile << NewWrite;
    }
 
 
    return 0;
}


Есть файл, в котором имеется ряд записей в формате две цифры + 20 знаков. Цепочка знаков может повторяться, а вот цифры в начале имеют разные значения. Моя цель найти все одинаковые цепочки в файле, записать эту цепочку в структуру, и в зависимости от первых двух символов прибавить в поля структуры по единице (то есть статистика). Всё работает, но работает буквально пару секунд, далее вылетает ошибка с доступом для записи.
VS 2019
Вложения
Тип файла: zip DataOfSeriya 01_05_2010 01_05_2022 SHAG_050.zip (32.8 Кб, 2 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.05.2022, 21:08
Ответы с готовыми решениями:

На 14 строчке выдает одну и ту же ошибку. Вообще не понимаю из-за чего
void predlozhenie(string ch)//Вывести текст, составленный из последних букв всех слов. { string ch2; int i = 0, j = 0; while (i...

Не понимаю ошибку при использовании базы данных
Всем привет System.Data.SqlClient.SqlException: 'Login failed for user 'userid'.' Такая ошибка This exception was originally...

Компрессия данных
Я хочу написать программу (что-то наподобие FreeARC) которая хорошо сжимает данные. Помогите мне подобрать алгоритмы компрессии для...

24
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
11.05.2022, 01:14  [ТС]
Студворк — интернет-сервис помощи студентам
....

Добавлено через 2 минуты
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
UnikSerii *CompressedSerii = new UnikSerii[1048576]{};
Поехало)) Тупенький я, извините

Добавлено через 2 часа 34 минуты
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
UnikSerii *CompressedSerii = new UnikSerii[1048576]{};
В общем да, это сработало. И спасибо за подсказку как считать уникальные комбинации, мой навык гугления меня подвел. Я уменьшил цепочку до 8 элементов, чего под мою задачу тоже хватит и уникалов будет не миллион, вы мне очень сильно помогли
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
11.05.2022, 02:10
Цитата Сообщение от Laborant666 Посмотреть сообщение
Я уменьшил цепочку до 8 элементов, чего под мою задачу тоже хватит
На самом деле ваши последовательности из +- можно рассматривать как числа, записанные в двоичной системе счисления, только при помощи +- вместо 01. Если вы будете представлять эти последовательности именно как числа, а не как строки, то и места в памяти они будут занимать намного меньше, и сравнение и поиск работать будет намного быстрее.

А в случае длины 8 и поиск на самом деле не нужен. Можно напрямую адресовать массив такими индексами.
0
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
11.05.2022, 15:13  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
На самом деле ваши последовательности из +- можно рассматривать как числа, записанные в двоичной системе счисления, только при помощи +- вместо 01
Об этом я подумал только после сна, отсюда и понял почему 2^20 было. Поиск сравнительно быстр, дело не в скорости, эту операцию мне нужно сделать один только раз (если бы более, то имеет смысл представить цепочку как числа)

Добавлено через 58 минут
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Почему в программе используется функция eof. Что она должна здесь делать?
Решил проблему. После считывания в брейк и не считывает два раза, ну точнее считывается, но уже не обрабатывается считанное за концом файла

C++
1
2
3
getline(DataFile,DataLine);
        if (DataFile.eof())
            break;
Добавлено через 40 секунд
Всё же, как оказалось, вылетало по eof в прошлом варианте, это я не туда вчера смотрел по логам
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,400
11.05.2022, 18:42
Цитата Сообщение от Laborant666 Посмотреть сообщение
но уже не обрабатывается считанное за концом файла
Можно лишь повторить, что в вашей программе не должно быть никаких обращений к функции eof.

Главный цикл должен выглядеть примерно так

C++
1
2
3
4
5
6
7
8
9
10
do
{
  if (!getline(DataFile,DataLine))
    break;
  if (DataLine.empty())
    continue;
 
  // Обработка...
 
} while (true);
Это сделано в предположении, что пустые строки могут встретиться и в середине файла. Хотя, конечно, вместо проверки DataLine.empty() уместнее чуть более продвинутая проверка на "это что-то, что не подлежит обработке".
0
 Аватар для Laborant666
208 / 101 / 20
Регистрация: 30.06.2020
Сообщений: 848
16.05.2022, 14:11  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Главный цикл должен выглядеть примерно так
хм, а идея хороша, спасибо, возьму на вооружение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.05.2022, 14:11

вообще не понимаю строк
. Дана строка символов S. Известно, что символ s1 отличен от восклицательного знака и что среди s2, s3, … есть по крайней мере один...

Рекурсия в JavaScript. Не понимаю вообще
Все привет! Не понимаю, как работают рекурсии! Рекурсия - это когда функция вызывает саму себя. Ну, ок...пытаюсь разобраться с примерами и...

Вообще не понимаю что происходит(
Мне дали модуль с процедурой для работы с SQL, но я в толк не возьму чем эта процедура вообще занимается: Procedure...

битовые операции не понимаю вообще
функция изменяет старший байт числа на заданное значение не изменяя младший байт пожалуйста помогите

, сижу на лр и вообще не понимаю как сдлеать!
Заранее огромное спасибо! три номера под номером 12. вообще не понимаю как сделать =(


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru