Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление символов ДОС в начале текстового файла, Медленно работает функция удаления 
V
    Опции темы
Voldemar2004
  Дата 20.4.2009, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



У меня такая проблема: есть файл в ДОС-кодировке со спецсимволами в начале:

Цитата

(s16.6H&l0O(s3B 


Город..........
...................
...................
...................
...................
...................
...................
...................


я читаю его в буфер, начиная с символа "Г" (слово "Город") до конца файла:

Код
void CutSymbols(string Text, string OutPutFileName);

void CutSymbols(string Text, string OutPutFileName);
{

        unsigned int SymbolPosition=0;
        // Пока не встретится символ 'Г'
        for(unsigned int i=0; i<100; i++)
        {
                if(Text[i] == 'ѓ') {
                SymbolPosition=i;
                break;
                }
        }

        unsigned int SymbolsCounter=strlen(Text.c_str());

        string tmpBuffer;
        for(i=SymbolPosition; i<SymbolsCounter-2; i++)
        {
        tmpBuffer += Text[i];
        }

ofstream outputFile;
outputFile.open(OutPutFileName);
outputFile << tmpBuffer << endl;
outputFile.close();

}


Все работает, но т.к. текстовые файлы очень большие ~ 100-200 Мб - время выполнения очень большое. Есть ли способ сделать быстрее ? Мне просто нужно из исходного текстового файла размером 100 Мб удалить эти символы:

Цитата
(s16.6H&l0O(s3B 


и записать файл без них.


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
azesmcar
Дата 20.4.2009, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Voldemar2004

Еслиб эти данные были в конце, можно было бы легко обойтись. По моему тут единственный способ - переписать файл как собственно и сделано.
PM   Вверх
zim22
Дата 20.4.2009, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



200 метровый файл обработался за 1-2 секунды
Код

#include <fstream>
#include <vector>

int main()
{
  const int chunk_size = 1000000;
  std::vector<char> vc(chunk_size);  
  
  std::ifstream in("file.txt", std::ios::binary);  
  std::ofstream out("result.txt", std::ios::binary);

  in.seekg(20); // здесь укажите количество символов, которые необходимы игнорировать с начала файла
  while (in.read(&vc.front(), chunk_size)) {
    out.write(&vc.front(), chunk_size);
  }
  out.write(&vc.front(), in.gcount());

  in.close();
  out.close();

    
    return 0;
}





--------------------
PM MAIL   Вверх
Voldemar2004
Дата 20.4.2009, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1650
Регистрация: 25.12.2004

Репутация: нет
Всего: 23



azesmcar, 
Цитата(azesmcar @  20.4.2009,  17:52 Найти цитируемый пост)
Еслиб эти данные были в конце, можно было бы легко обойтись.
Ну это я и сам понял smile  Но они в начале файла.

zim22, супер !  smile с меня +1  smile 

Тема закрыта   smile 


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0476 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.