Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25

Автоматическое чтение и сравнение строк в txt

19.12.2019, 23:14. Показов 3116. Ответов 27

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть такая необычная задачка:

Есть три txt файла

Файл Base1 -єталонный основной отсортированный список неповторяющихся слов Размер файла 10гб!
Файл Test1 - список слов которые надо проверить на совпадение с файлом Base1.txt Размер файла от 500мб
Файл Check1 - построчный список слов совпавших при сравнении файлов Word1 и Test1


В итоге программа должна работать по такому принципу: При нажатии кнопки идет построчное сравнение двух файлов, Base1 и Test1 соответственно. Если 1 или больше совпадений в Test1 найдено с основным файлом, то совпавшие строчки пишутся в Check1.

Важно: у меня уже есть похожая програмка написанная добрым человеком на Дельфи, но у нее есть существенный минус, она работает в один поток и много времени тратися на обработку одного прохода. Возможно ли распаралелить хотя б 4/6/8/10 потоков ?

Мне не обязательно раскрывать код, можете просто дать экзешку в личку.

P.S. Не надо бомбить, злорадствовать и посылать курить форум, кто захочет тот пусть поможет.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.12.2019, 23:14
Ответы с готовыми решениями:

Чтение строк из txt файлов
Ну Например У меня есть txt файл и в нём есть 5 строк как прочитать и вывести не все 5 строчки а только 1

Сравнение строк в структуре, чтение из файла
Требуется написать программу, которая считывает из файла данные о студентах, сортирует их по фамилии и выводит их на экран. Далее нужно...

Автоматическое чтение и сравнение значений в txt
Здравствуйте, есть такая на первый взгляд тривиальная задача. Но так как последний раз Делфи я открывал лет 10 назад то задача ввела меня в...

27
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
19.12.2019, 23:50
Я бы сперва подготовил файл test1, отсортировав его. Есть такая возможность?
0
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
19.12.2019, 23:54  [ТС]
Извините, забыл уточнить. Да файл "test1" - отсортирован!
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
20.12.2019, 01:35
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
#include <iostream>
#include <fstream>
#include <string>
 
int main()
{
    std::ifstream is_base("Base1.txt");
    std::ifstream is_test("Test1.txt");
    std::ofstream os("Check1.txt");
    if (!is_base.is_open() || !is_test.is_open() || !os.is_open())
        return 1;
 
    std::string buff1, buff2;
    int cmp(0);
    while (true) {
        if (cmp == 0 && !buff1.empty()) os << buff1 << '\n';
        if (cmp <= 0 && !std::getline(is_base, buff1)) break;
        if (cmp >= 0 && !std::getline(is_test, buff2)) break;
        cmp = buff1.compare(buff2);
    }
 
    is_base.close();
    is_test.close();
    os.close();
    return 0;
}
Попробуйте так, но всё упрётся в скорость чтения с диска.
1
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
20.12.2019, 04:17
Waitman, не откроете секрет, как вы измудрились получить "список неповторяющихся слов" на 10гб?
Я вот сейчас попробовал в обычном редакторе взять текст книги на английском языке (960 страниц, размер текстового файла около 2Мб) и сделать из него отсортированный список неповторяющихся слов. Получилось около 80 килобайт, 8836 слов (регистр учитывается). Как вы измудрились получить такой объём? Все слова на всех языках мира? (Т.е. UCS-16 в лучшем случае, UTF-8 - в худшем. Не?)

Файл Test1 принципиально не сортированный?

Добавлено через 2 часа 22 минуты
Waitman, есть одна мыслишка. Вы можете заархивировать и выложить куда-нибудь в доступное место достаточно большие куски файлов Base1.txt и Test1.txt что бы было на чём потестировать скорость работы? Скажем по 1/10 от объёма одного и другого файла.
0
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
20.12.2019, 22:09  [ТС]
"Попробуйте так, но всё упрётся в скорость чтения с диска."

Значит так, запустил прогон файла 8.5мб по базе (12гб), окно консоли пропало через 1м46с, файл Check1 пустой, скорее всего код даже не прошел и части. Загружено было только 1 ядро.

Тот же прогон моей програмкой на Делфи дает контрольный результат совпадения в файл Check1. Прогон занимает 34минуты, загружено естественно одно ядро.




Waitman, не откроете секрет, как вы измудрились получить "список неповторяющихся слов" на 10гб?
Я вот сейчас попробовал в обычном редакторе взять текст книги на английском языке (960 страниц, размер текстового файла около 2Мб) и сделать из него отсортированный список неповторяющихся слов. Получилось около 80 килобайт, 8836 слов (регистр учитывается). Как вы измудрились получить такой объём? Все слова на всех языках мира? (Т.е. UCS-16 в лучшем случае, UTF-8 - в худшем. Не?)

Файл Test1 принципиально не сортированный?



Файл Test1 - сортированный!



Добавлено через 2 часа 22 минуты
Waitman, есть одна мыслишка. Вы можете заархивировать и выложить куда-нибудь в доступное место достаточно большие куски файлов Base1.txt и Test1.txt что бы было на чём потестировать скорость работы? Скажем по 1/10 от объёма одного и другого файла.


Это не просто слова а коды буква и цифры, я просто при описании задачи условно назвал словами.

Так что подойдет любой список на Ваше усмотрение.

Даже банально:

Alexander
Andrea
Andreas
Angelika
Anja
Anna
Barbara
Bernd
Berndt
Bernt
Birgit
Brigitte
Carin
Cathrin
0
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
21.12.2019, 02:05
Waitman, ещё раз уточните: оба входных файла отсортированы?

В файле Test1.txt примерно с какой вероятностью попадаются слова, которых нет в Base1.txt?

Файл Check1.txt должен быть отсортирован или это не обязательно?

Добавлено через 28 минут
И ещё вопрос. Как часто изменяется файл Base1.txt? Каждый новый поиск с новым Base1? Или несколько поисков с неизменным Base1?
0
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
21.12.2019, 11:29  [ТС]
Waitman, ещё раз уточните: оба входных файла отсортированы?

Да, именно так все файлы обязательно отсортированы!



В файле Test1.txt примерно с какой вероятностью попадаются слова, которых нет в Base1.txt? 99% другие значения


Файл Check1.txt должен быть отсортирован или это не обязательно? - нет разницы

Добавлено через 28 минут
И ещё вопрос. Как часто изменяется файл Base1.txt? Каждый новый поиск с новым Base1? Или несколько поисков с неизменным Base1?
- Base1 не меняется никогда, там скажем так, константы.
0
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
21.12.2019, 18:44
Лучший ответ Сообщение было отмечено Waitman как решение

Решение

Waitman, попробуйте для начала самое простое:
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
#include <iostream>
#include <fstream>
#include <string>
#include <chrono>
 
using namespace std;
 
template <typename T = std::chrono::milliseconds> class TimeLag {
    std::chrono::high_resolution_clock::time_point m_start, m_end;
    std::chrono::high_resolution_clock::time_point m_startPause, m_endPause;
    std::chrono::high_resolution_clock::duration m_pauseDuration;
    bool m_paused;
public:
    TimeLag() : m_paused(false), m_pauseDuration(std::chrono::duration_values<T>::zero()) {}
    void start() {
        m_start = std::chrono::high_resolution_clock::now();
        m_pauseDuration = std::chrono::duration_values<T>::zero();
    }
    void stop() {
        m_end = std::chrono::high_resolution_clock::now();
    }
    void stop(const std::string& comment = std::string()) {
        m_end = std::chrono::high_resolution_clock::now();
        report(comment);
    }
    void report(const std::string& comment) {
        std::cout << "--- " << comment << (comment.empty() ? "" : ": ") << "Elapsed time: "
            << std::chrono::duration_cast<T>(m_end - m_start - m_pauseDuration).count();
        if (is_same<T, std::chrono::nanoseconds>::value)
            std::cout << " ns" << std::endl;
        else if (is_same<T, std::chrono::microseconds>::value)
            std::cout << " us" << std::endl;
        else if (is_same<T, std::chrono::milliseconds>::value)
            std::cout << " ms" << std::endl;
        else if (is_same<T, std::chrono::seconds>::value)
            std::cout << " s" << std::endl;
    }
    void pause() {
        if (!m_paused) {
            m_paused = true;
            m_startPause = std::chrono::high_resolution_clock::now();
        }
        else {
            m_paused = false;
            m_endPause = std::chrono::high_resolution_clock::now();
            m_pauseDuration += m_endPause - m_startPause;
        }
    }
};
 
bool simpleFind(const string& baseFileName, const string& testFileName, const string& outFileName) {
    ifstream ifs(baseFileName), tfs(testFileName);
    ofstream ofs(outFileName);
    if (!ifs || !tfs || !ofs)
        return false;
 
    string word, testWord;
    while (tfs >> testWord) {
        do {
            if (testWord == word) {
                ofs << word << endl;
                break;
            }
            if (testWord < word)
                break;
        } while (ifs >> word);
    }
    ofs.close();
    tfs.close();
    ifs.close();
    return true;
}
 
const string baseFileName = "Base1.txt";
const string testFileName = "Test1.txt";
const string outFileName1 = "Check1.txt";
 
int main(void) {
    setlocale(LC_CTYPE, ".1251");
 
    TimeLag<chrono::milliseconds> timer;
    timer.start();
    simpleFind(baseFileName, testFileName, outFileName1);
    timer.stop("simpleFind");
    return 0;
}
На синтетических данных объёмом
  • Base1.txt 2.47Gb
  • Test1.txt 2.57Mb
на моём железе это работает около минуты. Объём Check1.txt ~27Kb.

Напишите, как у вас работает на реальных данных.

То, что Base1 не изменяется - это хорошо. Есть простор подумать ещё.
2
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
21.12.2019, 22:30  [ТС]
А может быть проблема в том что я компилю код в Dev-C++ ? Компилится без проблем, ошибок и прочего.

Значит так:


Експеримент 1:

Взял простой шаблонный файл 1кб (около 80 строк) в качестве базового и в другой закинул рандомное слово с первого. Слова а-ля "Heinz".

Итог: и первый и второй код находят контрольное слово за 1 сек.


Експеримент 2:

Что б долго не ждать, взял средний шаблонный файл 48мб в качестве базового и в другой закинул рандомное слово с первого. Слова а-ля "bruckmann".

Итог:
Первый Ваш код за секунду находит котрольную строку.
Второй код просто появляется и пропадает окно и все никакого результата.


Експеримент 3:
На микро файле в 8мб с моими строчками ни 1 ни 2 файл результата не дают, просто через секунду пропадают окна.

Но ВАЖНОЕ уточнение у меня каждая строка по 40 знаков! А в тех шаблонных файлах с интернета ну максимум 10, может они банально не влезают ?



Добавлено через 7 минут
P.S Контрольный тест: База шаблонная из нета 2гб, тест файл 48мб ( все строки из него есть в большом файле) - результат: первый код за 4 сек дает ожидаемый результат!

второй код - закрывается через 1 сек. Так что первый Ваш код работает хорошо но видимо ему не нравятся длинные строки...
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
21.12.2019, 22:38
Waitman, давайте посмотрим, что там внутри. Скиньте diff.txt после выполнения этого кода:
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
#include <iostream>
#include <fstream>
#include <string>
#include <time.h>
 
int main()
{
    std::ofstream os("diff.txt");
    auto foo = [&](std::string path) {
        std::ifstream is_base(path);
        if (!is_base.is_open()) return false;
 
        std::string cur, prev("");
        size_t fail_cnt(0);
        std::cout << 0;
        while (std::getline(is_base, cur)) {
            if (cur < prev) {
                std::cout << '\r' << ++fail_cnt;
                os << prev << "\t" << cur << std::endl;
            }
            prev = cur;
        }
        std::cout << '\n';
        is_base.close();
        return true;
    };
 
    foo("Base1.txt");
    foo("Test1.txt");
 
    os.close();
    system("pause");
    return 0;
}
Если файл будет большим, киньте кусок в несколько строк и итоговые цифры из консоли.
0
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
21.12.2019, 22:51
Цитата Сообщение от Waitman Посмотреть сообщение
Второй код просто появляется и пропадает окно и все никакого результата.
Запускайте мой код из консоли. Там не стоит задержка закрытия консольного окна при запуске из IDE.
Или добавьте в main() system("pause"); перед return 0;
0
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
22.12.2019, 00:10  [ТС]
Цитата Сообщение от nalbe666 Посмотреть сообщение
Waitman, давайте посмотрим, что там внутри. Скиньте diff.txt после выполнения этого кода:
Компилятор ругается:

C++\3\main.cpp [Error] 'foo' does not name a type
C++\3\main.cpp [Error] 'foo' was not declared in this scope

компилю код в Dev-C++


Цитата Сообщение от L0M Посмотреть сообщение
Запускайте мой код из консоли. Там не стоит задержка закрытия консольного окна при запуске из IDE.
Или добавьте в main() system("pause"); перед return 0;

На шаблонном сравнении 2гб и 48мб файл с правкой system("pause");
пишет --- simpleFind: Elapsed time: 2887ms и странно но дает 100кб строк, хотя должно давать 48мб как и код №1.

На моей базе пишет --- simpleFind: Elapsed time: 11ms и все.
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
22.12.2019, 00:23
Кликните здесь для просмотра всего текста

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
#include <iostream>
#include <fstream>
#include <string>
 
bool foo(std::string path, std::ofstream& os) {
    std::ifstream is_base(path);
    if (!is_base.is_open()) {
        std::cout << "err";
        return false;
    }
    std::string cur, prev("");
    size_t fail_cnt(0);
    std::cout << 0;
    while (std::getline(is_base, cur)) {
        if (cur < prev) {
            std::cout << '\r' << ++fail_cnt;
            os << prev << "\t" << cur << std::endl;
        }
        prev = cur;
    }
    std::cout << '\n';
    is_base.close();
    return true;
}
 
int main()
{
    std::ofstream os("diff.txt");
    if (!os.is_open()) {
        std::cout << "err";
        return false;
    }
 
    foo("Base1.txt", os);
    foo("Test1.txt", os);
 
    system("pause");
    return 0;
}
0
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
22.12.2019, 01:07
Цитата Сообщение от Waitman Посмотреть сообщение
P.S Контрольный тест: База шаблонная из нета 2гб, тест файл 48мб ( все строки из него есть в большом файле)
И откуда это добро можно скачать?

Цитата Сообщение от Waitman Посмотреть сообщение
А может быть проблема в том что я компилю код в Dev-C++ ?
Dev-C++ пользуется внешним компилятором. Скорее всего у вас какой-то GNU C++ компилятор. Только какой?
0
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
22.12.2019, 11:50  [ТС]
nalbe666

очередная ошибка:
C++\3\main.cpp [Error] no matching function for call to 'std::basic_ifstream<char>::basic_ifstre am(std::string&)'


Цитата Сообщение от L0M Посмотреть сообщение
И откуда это добро можно скачать?

Dev-C++ пользуется внешним компилятором. Скорее всего у вас какой-то GNU C++ компилятор. Только какой?
1) Вот, я Вам подготовил два банальных файла в архиве на которых тестирую https://fex.net/s/xykrvzn

2) Компилятор TDM-GCC 4.9.2 64bit
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
22.12.2019, 12:41
Waitman, С ваших файлов Check1 получился такой же как и Test1, 100% совпадений. Это первым кодом, так что попробуйте его готовым приложением по ссылке https://drive.google.com/open?... oyln0noZy0
Единственное место, где я вижу проблему, это если нарушена сортировка внутри файлов.
0
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
22.12.2019, 19:13
Цитата Сообщение от Waitman Посмотреть сообщение
Вот, я Вам подготовил два банальных файла
Отлично!

Смотрим ваш Test1: неотсортирован. Имеет 487945 повторов (4346588 - 3858643).

Смотрим ваш Base1: неотсортирован.

Цитата Сообщение от Waitman Посмотреть сообщение
Waitman, ещё раз уточните: оба входных файла отсортированы?
Да, именно так все файлы обязательно отсортированы!
Все люди врут. (с) Доктор Хаус

Добавлено через 3 минуты
В Base1 имеются строки (одно слово на строку!), содержащие пробелы.

Добавлено через 2 часа 27 минут
Waitman, так что сравниваем? Всё со всем по несортированным файлам?

Цитата Сообщение от Waitman Посмотреть сообщение
Base1 не меняется никогда, там скажем так, константы.
Ещё раз уточните: это действительно так?
1
0 / 0 / 0
Регистрация: 20.08.2018
Сообщений: 25
22.12.2019, 22:10  [ТС]
Все люди врут. (с) Доктор Хаус - я также люблю данный сериал. Но:

Вы спрашивали про то отсортированны ли файлы "МОИ СПИСКИ" - да они отсортированы. А то что я Вам скинул, это просто набор строк из инета чисто для теста. И я Вам писал, что Ваш код №1 их прекрасно обрабатывает, но мои отсортиванные списки где 40 знаков в строке он тупо игнорит.

Waitman, так что сравниваем? Всё со всем по несортированным файлам?

Сравнивается неменяющийся список из База1 с списком Тест1 который постоянно меняется.

Base1 не меняется никогда, там скажем так, константы.
Ещё раз уточните: это действительно так?


Да, он не меняется никогда. Меняется только файл Тest1.


А вот например такое:

Файл База1

9GkWeNjwuMzVUXXM4MyRSg1TNbMkFoe2CCTPnm01
9GkWEu45KRYpiwyNhbvTvmcmoe9whuMeNzTPpp81
9GkwoSS9ngwfS5YdT2kb2x8NRxKXGTRCJYTPgh16

Файл Тест1

9GkWEu45KRYpiwyNhbvTvmcmoe9whuMeNzTPpp81

Результат вместо второй строчки - пустой файл ... Почему ? банально среди 3 строк найти 1 ...
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
22.12.2019, 22:21
Waitman, мнда.
9GkWeNjwuMzVUXXM4MyRSg1TNbMkFoe2CCTPnm01
9GkWEu45KRYpiwyNhbvTvmcmoe9whuMeNzTPpp81
9GkwoSS9ngwfS5YdT2kb2x8NRxKXGTRCJYTPgh16
Вторая строка должна идти перед первой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.12.2019, 22:21
Помогаю со студенческими работами здесь

Чтение из файла 'New.txt', запись четных строк в '1.txt', а нечетных в '2.txt'
В общем все работает, но есть &quot;НО&quot;, иначе бы не открывал тему. Содержимое исходного файла: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2...

Сравнение строк в txt
Люди добрые помогите сравнить записи в двух текстовиках и вывести не совпадающие. Нашёл код но не сравнивает. #define...

Сравнение строк txt файлом
Здраствуйте, мне нужно сделать так чтобы: допустим создал 2 файла txt в 1-й записал Vasia,Petia а в другой вывел ответ кто больше...

Чтение строк из file.txt
Здравствуйте. Помогите, пожалуйста, с чтением данных из текстового файла. Система такая: у меня есть некий file.txt, в нем данные в...

Чтение конкретных строк из txt (2 - 5)
Подкиньте, пожалуйста, пример (на VB) чтения, например, со 2 строки txt файла по пятую. Или любой другой, но смысл таков, что прога...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru