Нужен совет по хранению строк во внешнем файле...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Нужен совет по хранению строк во внешнем файле...

Сообщение kibernetics » 10.08.2007 (Пт) 17:49

Не могу скумекать какбы это лучше, а главное в чём, хранить строки(пути файлов). Задача такая: формируется пресет, в котором описываются список путей к файлам. Например, всего 10 быстрых пресетов, но в каждом из них путь файла может изменяться, удалятся или добавляться новый путь. Вопрос такой, в чём организовать хранение путей? Т.е. как потом организовывать добавление, или удаление какой-то строчки? Поначалу, я думал делать такой текстовый файл:
Код: Выделить всё
#1 'типа индентификатор пресета
C:\Temp
C:\Temp\File1.txt
D:\Work\table.xls
D:\Work\File2.txt
#2
С:\Temp\DataOut.doc
C:\Temp\File1.txt
D:\Work\tableTemp.xls
#3
...
...
#4
..


но потом подумал, а что если мне понадобится добавить в первый пресет еще строчку, то как смещается всё что ниже? Или допустим, удалить строчку... И как идентифицировать пресет? Читать далее по тексту, пока не встретится снова символ #?

В общем, может существует уже какое-то решение? Посоветуйте...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 10.08.2007 (Пт) 18:02

Долой plain-текстовый формат хранения данных. Храни таблицы "пресетов", в них оффсеты на таблицы файлов, а в них оффсеты и длины строк. Сами строки храни "кучно" в конце файла. Дописывай при необходимости в конец файла.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 10.08.2007 (Пт) 18:23

Если попроще, то я бы сделал так:

Dim id_preset as integer 'идентификатор пресета
Dim put1 as String, put2 as String, put3 as String

Запись данных:
f=freefile
Open "ТУТ ПУТЬ К ФАЙЛУ ТВОИХ ПРЕСЕТОВ" For Append As f
Write #f, id_preset, put1, put2, put3
Close f

Получение данных:
f=freefile
Open "ТУТ ПУТЬ К ФАЙЛУ ТВОИХ ПРЕСЕТОВ" For Output As f
Input #f, id_preset, put1, put2, put3 'переменные можно поменять
Close f

Думаю суть идеи ясна. Если нужно включаешь операцию записи и чтения в цикл!
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 10.08.2007 (Пт) 18:32

Yastrebov, ты не в теме.

По поводу таблиц пресетов: вместо выдумывания собственного формата, лучше взять какой-нибудь из уже реализованных (INI, XML, MDB, etc.)
Изображение

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 10.08.2007 (Пт) 18:51

А обычный *.ini файл в данном случае не подойдет?
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 10.08.2007 (Пт) 18:52

Долой plain-текстовый формат хранения данных....
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 10.08.2007 (Пт) 18:53

Хакер, почему? Для небольшого количества данных почему бы и нет?
Plain text удобно редактировать вручную, создавать что-то вроде конфигурационных файлов (если это конечно нужно).
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 10.08.2007 (Пт) 18:57

Это:
1) Несолидно.
2) Неэффективно. Данные нужны программе. Храните их так как удобнее будет программа. Программе будет куда одобнее прибавлять оффсет к чему-нибудь и читать оттуда. Нежели парсить ваши INI, XML, и прочее.

Совершенно лишнии символы перевода строки. Которые нужно искать в строке. Это очень долго. Гораздо лучше заранее знать длину того или иного параметра.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 10.08.2007 (Пт) 19:01

Не вижу в этом ничего несолидного. Многие программы используют *.ini файлы без зазрения совести.

И тем более не вижу смысла думать об эффективности, если размер файла измерется в пределах десятка килобайт. Разницу в скорости не заметишь даже с секундомером (если конечно не прогнать тест с числом итераций 10000).

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

Не стоит искать сложных путей там, где есть простые.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 11.08.2007 (Сб) 18:32

Вообще, это один-в-один формат INI...
Как вариант можно скидывать в реестр, если не нужно переносить конфиг...

Конечно, все это актуально при небольшом числе этих самых пресетов и строк.. Если их там 10000, то вариант, указанный Хакером, несомненно рулит.
label:
cli
jmp label

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 11.08.2007 (Сб) 20:55

Самый простой способ - использование PropertyBag.
Изображение

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 13.08.2007 (Пн) 8:24

XML вас спасет, товарищи. Будет там что то типа



Код: Выделить всё
<presets>
<preset id="1">
<path>c:\123</path>
<path>c:\1234</path>
</preset>
<preset id="2">
<path>c:\12367</path>
<path>c:\123489</path>
</preset>
</presets>




А добавлять/удалять - проще не придумаешь, через MSXML.DOMDocument
I don't understand. Sorry.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 13.08.2007 (Пн) 11:33

Отлично, осталось подождать, пока кто-нибудь предложит MDB.
Все остальные варианты из моего верхнего поста уже продублировали :-)
Изображение

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 13.08.2007 (Пн) 11:37

А если данных много и нужно ими лего оперировать, и при этом не хочется заморачиваться с самодельными форматами, обрати внимание на MDB !!!
tyomitch, :wink:
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 13.08.2007 (Пн) 12:06

Сюда, конечно, просится обычный INI-файл - как уже говорили выше. Все писать/читать готовыми API-шными функциями. И не выпендриваться! :lol:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 13.08.2007 (Пн) 12:11

Давайте, раздуем холивар :)
I don't understand. Sorry.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 13.08.2007 (Пн) 12:13

Andrey Fedorov, только в этом случае намного проще использовать готовый класс:
http://bbs.vbstreets.ru/viewtopic.php?t=25986
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 13.08.2007 (Пн) 12:14

RayShade

Баян.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 13.08.2007 (Пн) 12:19

вроде все нормальные варианты предложили, зачем повторять?..
Осталось kibernetics'у выбрать более подходящий
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 13.08.2007 (Пн) 17:56

я хотел было выбрать XML, но всё же остановился на МДБ. Быстро, оперативно, удобно...

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 13.08.2007 (Пн) 18:06

kibernetics, только не забудь про необходимость вместе с прогой распространять всякие там MDAC, JET :)

Все-таки мне кажется оптимальный вариант здесь *.ini (посмотри класс clsINI -- очень легко работать с файлом), но решать конечно тебе.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 13.08.2007 (Пн) 18:13

И ведь никому вариант с дата-файлом не нравится... деградация...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 13.08.2007 (Пн) 18:18

да, кстати, а в INI можно удалить сразу всю секцию?

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 13.08.2007 (Пн) 18:22

Хакер, сложное это и неблагодарное дело.

kibernetics, ты наверное пропустил мою ссылку:
http://bbs.vbstreets.ru/viewtopic.php?t=25986

Там все элементарно просто. Да секция легко удаляется RemoveSection
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 13.08.2007 (Пн) 18:29

Хакер, сложное это и неблагодарное дело.


Угу, деградация :cry:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 13.08.2007 (Пн) 18:35

Можешь и так называть, если угодно.

Но я не вижу причин изобретать велосипед там, где есть простые и общепринятые решения, такие как вышеперечисленные ini, xml, mdb...

Ради чего? Искусства ради?
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 13.08.2007 (Пн) 18:37

VVitafresh
да, тогда очевидно, что по простоте и возможностям своим всё-таки INI это как раз к месту...

Хакер
Я тоже боюсь загрузится дат-файлом.

Люди, спасибо за предложения... Любопытно, что в общем-то единого мнения не оказалось.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 13.08.2007 (Пн) 18:38

ini, xml - текстовые форматы. В том смысле, что структуризация информации производится с помощью текстовых маркеров (в случае с ini - перевод строки, пробел, равно, в случае с XML - теги).

Текстовые маркеры сожрут место. Обработка текстовых маркеров сожрёт время и ресурсы.

mdb - особый случай (удивляюсь, как это никто не предложил устанавливать рядом с прогой MS SQL Server и хранить данные там).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 13.08.2007 (Пн) 18:44

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

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

Если тов. Хакер предложит удобный в использовании класс, который будет оперировать dat файлом, я с удовольствием им воспользуюсь.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 13.08.2007 (Пн) 18:54

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

Да это 10-15 минут...

Я по профессии не программист, программирую по мере необходимости.


Прошу объяснить, что значит программист "по профессии", и программист "не по профессии". Диплом? Вышка? В таком случае я тоже не программист.

Только дело вот не в димпломе...

У меня недостаточно времени, чтобы вникать во все тонкости, искать подвохи, устранять глюки.

Какие ещё токности? Откуда?
Какие подвохи? Откуда?
Какие глюки? Откуда? (Пиши изначально правильно).

Я беру готовое решение и применяю его для своей локальной задачи.

Это не правильно. Это всё равно что некоторые личности, тратящие пол часа на настройку CMS, и мнящие себя веб-программистами, веб-мастерами и прочими высококвалифицированными профессионалами. Это мерзко, на моя взгляд.

Собираю свое приложение из готовых кирпичиков, созданных кем-то другим.

И тут вдруг оказывается, за 9 часов до релиза, что кирпичик А конфликтует с кирпичиком W, потому что кирпичик W собирался таким же "склейщиком" из таких же "кирпичиков". И за 9 часов сделать ничего не успеваешь. И терпишь крах... Конец фильма. Титры.

Если тов. Хакер предложит удобный в использовании класс, который будет оперировать dat файлом, я с удовольствием им воспользуюсь.


Это невозможно в принципе. Код, который работает с одним форматом не должен работать с каким-то другим форматом. Иначе теряется эффективность за счёт универсальности.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 98

    TopList