Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сокращение файла, вырезание куска файла 
:(
    Опции темы
Budy
Дата 13.9.2007, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 616
Регистрация: 6.2.2004
Где: Екатеринбург

Репутация: 1
Всего: 2



Добро пожаловать в данную тему

Изложу суть проблемы. Каждый день некая программа ведет лог-файл по своим операциям. Чем больше пользователей, тем больше операций, тем больше лог. Лог-файл за день вырастает до 1-2 Гб. Известно, что каждая операция занимает N символов. Каждая из разделяется по типам (удаление, добавление, изменение).
Написал программу, которая удаляет лишние операции, путем отбора и сохраняет их в другой файл. Данная процедура занимает много времени (20-30 минут), так как работа происходит по сети, а необходимо ускорить процесс.
Нужно написать программу, которая будет работать прямо с лог-файлом - удалять куски данных.

Наглядный пример: в файле записаны операции АБВББААВБВАБ. Нужно удалить все операции А и Б и оставить остальное.
Надеюсь идею передал верно smile

Пробовал искать в разных источниках - книги, форумы, везде говорится, что это не возможно. Однако есть надежда, что кто-нибудь знает как это сделать, или хотя бы оптимизировать (ускорить) процесс.

Заранее всем спасибо за помощь


--------------------
Как ты назовешь свой корабль, так на нем и напишут
user posted image
PM MAIL WWW ICQ   Вверх
_hunter
Дата 13.9.2007, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



Цитата(Budy @  13.9.2007,  16:54 Найти цитируемый пост)
Пробовал искать в разных источниках - книги, форумы, везде говорится, что это не возможно

не совсем понятно что понимается под "это". -- если ищется способ одной (системной) функцией удалить кусок файла (типа DeleteFilePiece(path, startPosition, endPosition)) то такой функции действительно нет.
единственный способо удалить из файла кусок данных -- это создать новый файл и перенести туда все, кроме удаляемой инфы. и перезаписать этим файлом текущий файл. возможны так же вариации с подчитыванием куска файла в память и перезаписи этим куском затираемые данные, но большого прироста производительности это не даст...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
bems
Дата 13.9.2007, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



сразу веди лог в виде кучи файлов ограниченного размера. тогда если удаляется большой кусок, то бОльшую часть можно сделать как удаление файла целиком. Будет ьыстрее. Или используй БД


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Budy
Дата 13.9.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 616
Регистрация: 6.2.2004
Где: Екатеринбург

Репутация: 1
Всего: 2



_hunter, насчет единственного способа, я именно так и делал, но занимает слишком много времени. Админ меня не пускает на сервер, где лежат логи, а по сети получается очень долго, потому что сетка постоянно занята.
Цитата
не совсем понятно что понимается под "это". -- если ищется способ одной (системной) функцией удалить кусок файла (типа DeleteFilePiece(path, startPosition, endPosition)) то такой функции действительно нет.


Сейчас просматривал логи и заметил такой приятный парадокс - ненужные операции в основном идут в начале и в конце лога, а нужные примерно посередине. А если в процентах, то в основном 20-40% в начале и около 30% в конце. Задача упрощается - можно ли подрезать файл не посередине, а с краев? Тогда лог можно было сократить в 2-3 раза!


--------------------
Как ты назовешь свой корабль, так на нем и напишут
user posted image
PM MAIL WWW ICQ   Вверх
bems
Дата 13.9.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



обрезать конец можно с помощью  SetEndOfFile


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Budy
Дата 13.9.2007, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 616
Регистрация: 6.2.2004
Где: Екатеринбург

Репутация: 1
Всего: 2



bems, да это полезно, спасибо... А можно сделать что-нибудь с началом файла?


--------------------
Как ты назовешь свой корабль, так на нем и напишут
user posted image
PM MAIL WWW ICQ   Вверх
bems
Дата 13.9.2007, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



с началом все так же как с серединой


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Snowy
Дата 13.9.2007, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Не перетаскивая файл к себе, ты не узнаешь его содержимого и не сможешь определить, что вырезать, а что нет.
Так что оптимальный вариант - производить работу с файлом на сервере.
Если админу больше нравится нагрузка сети, то проблемы у вас обоих.
PM MAIL   Вверх
Budy
Дата 14.9.2007, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 616
Регистрация: 6.2.2004
Где: Екатеринбург

Репутация: 1
Всего: 2



bems, понятно, спасибо на этом

Snowy, ты прав, проблемы у нас обоих, но он этого не понимает :-\


--------------------
Как ты назовешь свой корабль, так на нем и напишут
user posted image
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 14.9.2007, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



  Ребята, а разве не для этих целей придумали БД? БД производит произвольный доступ к любой записи и позволяет удалить или добавить запись за время не зависящее от размеров (или почти независящее) самой базы.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Budy
Дата 14.9.2007, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 616
Регистрация: 6.2.2004
Где: Екатеринбург

Репутация: 1
Всего: 2



Alexeis, согласен, БД рулит, но так получилась что программа не может вести лог сразу в БД.

А вообще я уже оптимизировал свою программку - отрезаю конец файла и получаю файл размером около 60% от исходного. Теперь временные затраты уменьшаются в два с половиной раза. Радостно smile

Всем спасибо за участие.


--------------------
Как ты назовешь свой корабль, так на нем и напишут
user posted image
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




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


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

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