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

"вставка" с "заменой" текста в файле. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Case http://www.cyberforum.ru/cpp-beginners/thread359061.html
Можно ли как то в конструкции switch case задавать условие например case n<0:и выполнить действие
C++ Поместить в массив с[m] коэффициенты произведения двух многочленов. В массивах a и b хранятся коэффициенты двух многочленов степеней k и l. Поместить в массив с коэффициенты их произведения. (Числа k, l, m - натуральные, m = k + 1; элементы массива с индексом i содержит коэффициенты при x в степени i) http://www.cyberforum.ru/cpp-beginners/thread359057.html
Как запустить программу с параметрами? C++
Как запустить программу: srcds.exe ( путь D:\csserver\server) С параметрами: -console -game cstrike -port 27015 +maxplayers 24 +map de_dust2 +sv_lan 0 + log on -32bit -tickrate 66 . В консольном режиме! ______________ И ещё,возможно ли сделай смешанную программу: консоль над которой есть меню с несколькими пунктами?
Массив объектов C++
Создать массив объектов разного типа невозможно. Но, наверное, можно создать массив объектов, поле которых, будет содержать указатель на объекты разных типов. Такое можно реализовать через шаблоны? Набросайте код кто нибудь если не сложно)
C++ Определить количество чисел, встревающих в заданной матрице более одного раза http://www.cyberforum.ru/cpp-beginners/thread359038.html
Дана целочисленная прямоугольная матрица. Определить: 1) Количество строк, содержащих хотя бы один нулевой элемент 2) количества чисел, встревающих в заданной матрице более одного раза. Вот я сделал, для первого условия: #include <iostream> #include <cstdlib> #include <ctime> using namespace std; const int n = 5, m = 6;
C++ Vector string'ов и освобождение памяти Как известно вектор не освобождает память. В подавляющем большинстве случаев string работает на основе вектора (т.к. если использовать list - хранить на каждый байт по 2 указателя весьма не эффективно) и тоже не освобождает память. Допустим я создал вектор из 1000 стрингов содержащих строку 1000 байт каждый. При этом получился вектор из 1000 элементов размером в 1500 элементов (500... подробнее

Показать сообщение отдельно
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
01.10.2011, 20:10     "вставка" с "заменой" текста в файле.
Цитата Сообщение от Razzeeyy Посмотреть сообщение
мысль складывать всё содержимое файла в какой нибудь string buffer и уже по нему потом искать и с ним работать. а при завершении работы просто перезаписывать файл содержимым string buffer
Надо именно так делать, если конфиг-файл весил бы до 100MB то можно было просто работать с файлом, сам по себе файл не может сжиматься или расширяться только затирать старое значение пробелами или нулями любым символом, в итоге будут создаваться множество пустых фрагментов ну как в БД боряться с фрагментацией. Одно дело БД другое килобайтный конфиг-файл, вот пример набросал в начале весь конфигурационный файл считывается в карту map, уникальными ассоциативными ключами далее пример сохранения карты в конфиг с перезаписью всего файла. как и должно быть, не надо постоянно головку диска гонять если озу-память за 1GB переваливает, да и скорость работы диска на много медленнее озу.
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
#include <fstream>
#include <map>
#include <iostream>
#include <string>
using namespace std;
 
map<string, string> config;
 
int  main(void) {
 
    fstream  fp("D:\\config.txt", fstream::in); 
    if(! fp.is_open())
         exit(1);
 
    string line;
    char key[64], value[255];
    while(! fp.eof()) {
          getline(fp, line);
          if(sscanf(line.c_str(), "%[^ ]%*[^\"]\"%[^\"]\"", key, value) >= 2) 
                 config[key] = value;
     }
     fp.clear();
     fp.close();
 
      // вот так получать доступ по имени ключа
     cout << '\t' << config["section"].c_str() << endl;
     cout << '\t' << config["value1"].c_str()  << endl;
 
     // показать пары ключ = значение
     map<string, string>::iterator iter = config.begin();
     while(iter != config.end()) {
             cout << iter->first.c_str() << '\t' << iter->second.c_str() << endl;
             *iter++;
     }
 
     // записываем новые значения
    config["section"] = "MySQL and DB2";
    config["more"]    = "sub systems";
    config["value1"]  = "200";
    config["value2"]  = "7";
 
    // файл будет перезаписан
    fp.open("D:\\config.txt", fstream::out | fstream::trunc);
    for(iter = config.begin(); iter != config.end(); *iter++) {
          line = iter->first + " \"" + iter->second + "\"\n";
          fp.write(line.c_str(), line.length());
    }
    fp.flush();
    fp.close();
    config.clear();
    cin.get();
    return 0;
}
 
Текущее время: 02:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru