Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Удаление строчки из лога... Добавлено: 28.10.04 06:37  

Автор вопроса:  Surok
Есть лог message.log...
В него через Append добавляются пронумерованные новые строчки сообщений...При необходимости эти строчки считываются по порядку, начиная с первой.
Задача состоит в том, чтобы прочитанную строчку удалить так, чтобы на ее месте ничего не осталось, т.е чтобы все последующие сместились на место удаляемой (на одну позицию)...
Можно конечно заменить необходимую строку vbNullString, но вот, к примеру 1000 nullString, размещеные в столбец (в каждой строке) весят порядка 1.95 kb....а сообщений предполагается очень большое количетво.
После удаления строчки можно конечно переписывать все последующие на ону позицию вверх...Можно ли обойтись без этого, чтобы цикл обработки удалением прочитанного сообщения?

Ответить

  Ответы Всего ответов: 13  

Номер ответа: 1
Автор ответа:
 Surok



Вопросов: 36
Ответов: 106
 Профиль | | #1 Добавлено: 28.10.04 06:39
[После удаления строчки можно конечно переписывать все последующие на ону позицию вверх...Можно ли обойтись без этого, чтобы цикл обработки закончить удалением прочитанного сообщения?]

Ответить

Номер ответа: 2
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #2 Добавлено: 28.10.04 08:38
Переписывать файл равно придется. Сделай что ли через Collection. Либо юзай тот же CopyMemory.

Ответить

Номер ответа: 3
Автор ответа:
 Surok



Вопросов: 36
Ответов: 106
 Профиль | | #3 Добавлено: 28.10.04 10:44

Переписывать файл равно придется. Сделай что ли через Collection. Либо юзай тот же CopyMemory
[/qoute]

то, что через API придется делать - понял...а саму идею реализации нет...можно поподробней...

Ответить

Номер ответа: 4
Автор ответа:
 someone



Вопросов: 215
Ответов: 1596
 Web-сайт: 123
 Профиль | | #4
Добавлено: 28.10.04 22:09
Surok!!!
ты как линк сделал?????????????????????????????????????????????????????????????????????

Ответить

Номер ответа: 5
Автор ответа:
 someone



Вопросов: 215
Ответов: 1596
 Web-сайт: 123
 Профиль | | #5
Добавлено: 28.10.04 22:10
тьфу! т.е. как ты "Ответить" поместил в QUOTE

Ответить

Номер ответа: 6
Автор ответа:
 someone



Вопросов: 215
Ответов: 1596
 Web-сайт: 123
 Профиль | | #6
Добавлено: 28.10.04 22:11
баг что-ли

Ответить

Номер ответа: 7
Автор ответа:
 Gog



ICQ: 288876730 

Вопросов: 6
Ответов: 14
 Профиль | | #7 Добавлено: 29.10.04 10:45
Mogu posovetovat ispolzovat :Open.... Append, EOF(),Open....Input, Line Input , dinamic massiv.

Ответить

Номер ответа: 8
Автор ответа:
 Александр



Разработчик Offline Client

ICQ: 204034 

Вопросов: 106
Ответов: 1919
 Профиль | | #8 Добавлено: 29.10.04 16:34
EMPRO, убедительная просьба использовать тег CODE по назначению!!!
Для выделения своих реплик использовать теги B, U, I или QUOTE

Ответить

Номер ответа: 9
Автор ответа:
 Surok



Вопросов: 36
Ответов: 106
 Профиль | | #9 Добавлено: 29.10.04 16:43
>>> GOG
Круто!!!!Видимо не понята суть вопроса...
Ето все конечно класс, что ты знаешь основные операторы работы с текстовыми файлами (я их тоже знаю), но задача вот в чем (дело принципа):
Запиши в файл строчку, например "GOG"
Запиши после еще пару тысяч "GOG"
Теперь попробуй сделать так, чтобы в этом файле было записано в первой строке "GG", да так чтобы не переписывать этот файл заново...СЛАБО! Сделаешь - меня научи :)))

Фишка troble заключается в том, что можно открыть этот файл For Binary, узнать номер конкретной буквы, и даже попытаться стереть ее...(там вроде константа есть vbBack, которая передает код Backspace)...можно на месте етого символа записать vbNullChar...Итог всего етого один - на месте выбранного char остается какой-то символ, полагаю что ето vbNullChar или chr(0).....Короче символ из строчки без последствий, чтобы после него ничего не осталось, не удалишь....

Ответить

Номер ответа: 10
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #10 Добавлено: 30.10.04 13:06
Я бы посоветовал автору работать с его ЛОГ-файлом, как с INI-файлом, записывая в него данные через WritePrivateProfileString и считывая - через ReadPrivateProfileString. Это очень простые в использовании АПИшки. Удаление целой N-й строчки будет выглядеть так:
WritePrivateProfileString "LogRecords", "Record" & CStr(N), vbNullString, iniFile.


Здесь iniFile - полное имя ЛОГ-файла; "LogRecords" - имя секции, которую неизбежно придётся создать; а строчки внутри этой секции (собссно записи лога) типа имеют следующий вид:
Record1, Record2, ..., Record125, ...

При удалении данным способом файл "схлопнется" на месте удалённой строки.

Ответить

Номер ответа: 11
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #11 Добавлено: 30.10.04 19:50
Чё-то я криво объяснил структуру файла. Sorry. Вот как он выглядит:

[LogRecords]
Record1=какой-то текст (запись лога)
Record2=какой-то текст (запись лога)
...
Record125=какой-то текст (запись лога)
...

Ответить

Номер ответа: 12
Автор ответа:
 Surok



Вопросов: 36
Ответов: 106
 Профиль | | #12 Добавлено: 30.10.04 22:52
> Comanch
Огромное спасибо за совет...мне - то его как раз и не хватало..
RGRDS

Ответить

Номер ответа: 13
Автор ответа:
 Comanche



Вопросов: 87
Ответов: 459
 Профиль | | #13 Добавлено: 31.10.04 11:14
И ещё - в MSDN написано, что если вы произвели запись новых данных в INI-файл с помощью WritePrivateProfileString, а потом начали их читать оттуда (с помощью ReadPrivateProfileString), то вы можете увидеть неприятный эффект, что считываются-то СТАРЫЕ данные! как будто никакой записи новых данных перед этим и не было. Я как-то на такие грабли наступил... Однако, в MSDN есть и объяснение этого эффекта (кэширование файла), и рецепт, как этот эффект нейтрализовать: перед чтением из файла нужно сделать вот такой вызов:
WritePrivateProfileString vbNullString, vbNullString, vbNullString, iniFile

Это "сбросит" кэш, и ты гарантированно прочитаешь после этого НОВЫЕ данные, как и должно быть.

PS: Помимо удаления отдельной строчки "RecordsN", ты можешь также грохнуть и всю секцию:
WritePrivateProfileString "LogRecords", vbNullString, vbNullString, iniFile

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам