Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Работа с фаилами

Автор: valentin_191
Дата сообщения: 09.01.2004 22:36
Я жутко извиняюсь за свои бесконечные вопросы но я не где не могу найти на них ответы
Как можно сделать через API функции запись и чтения фаила нет конечно я знаю как это сделать
Private Sub Command1_Click()

Call WritePrivateProfileStringByKeyName("Main", "URL", _
"http://members.tripod.de/cmvb", "c:\test.ini")
Call WritePrivateProfileStringByKeyName("Main", "eMail", _
Valo, "c:\test.ini")

End Sub

Private Sub Command2_Click()

Dim MyString As String
MyString = Space(100)

Call GetPrivateProfileString("Main", "URL", "", MyString, _
Len(MyString), "C:\test.ini")
Call GetPrivateProfileString("Main", "eMail", "", MyString, _
Len(MyString), "C:\test.ini")
MsgBox MyString

End Sub

Но вопрос в другом как например записавать файл так что бы каждая новая запись начиналась с новой строки.
И как её можно считать что бы было как бы перелистывание с возможностью редактирования.
А хотя что я вам мозги парю вот условие
“Составить программу создания файла базы данных АТТракционы каждая запись должна содержать следующие поля Название отракциона.”
И это надо сделать через АПИ Так вопрос вот в чём как можно это записать в ини фаилы с Возможностью прокрутки и редактирования. Где про это можно посмотреть а то не как не получается а это как бы итоговая работа.
Автор: vito333
Дата сообщения: 10.01.2004 07:19
сильно сказано
Автор: valentin_191
Дата сообщения: 10.01.2004 12:40
Ну так не у кого идей нет
Автор: ShIvADeSt
Дата сообщения: 12.01.2004 00:56

Цитата:
Возможностью прокрутки и редактирования

Для организации прокрутки тебе надо будет загрузить все ключи одной секции в (например) ЛистБокс там сразу и прокрутка получается. Используй GetPrivateProfileSection. Только придется там небольшую обработку написать. Следующее, в инишке итак каждая запись с новой строки начинается. А для редактирования прикручиваешь Едит в котором редактируешь очередгой итем из листбокса, а потом меняешь его в инишке. Хотя использование ини в качесвте базы данных это гон.
Автор: valentin_191
Дата сообщения: 12.01.2004 08:41
Да ты прав я немного ошибся а как это можно сделать с TXT я имею в виду каждый раз новый номер и с новой строки.
Автор: Marvan
Дата сообщения: 12.01.2004 09:36
Для рабаты с файлами через API необходимы следующие функции:

OpenFile или CreateFile для "открытия" файла
SetFilePointer для установки указателя в файле
WriteFile и ReadFile для записи и чтения
CloseHandle для "закрытия" файла

В русском инете можно найти описания и примеры работы всех этих функций

можно скачать хороший справочник по API на h**p://www.mentalis.org/agnet/apiguide.shtml (есть русский интерфейс)

для того чтобы каждая запись начиналась с новой строки в файл пишется переменная VbCrLf

Ну а если надобно работать именно с ini файлом то все вышесказанное отменяется.
Надо найти в инете класс для работы с ini, а дальше как расписал ShIvADeSt
Автор: mihas83
Дата сообщения: 12.01.2004 10:32
Marvan

Цитата:
Для рабаты с файлами через API необходимы следующие функции

Еще на более "низком" уровне можна сделать чисто C-функциями (STDIO.H):
fopen(), fwrite(), sprintf(), ftell(), fseek(), fclose() и т.д.

Цитата:
для того чтобы каждая запись начиналась с новой строки в файл пишется переменная VbCrLf
Как альтернатива: "\r\n"
Автор: Marvan
Дата сообщения: 12.01.2004 11:21
mihas83
ага, вопрошающий еле в Visual Basic втыкает (как и его препод), а мы ему ща посоветуем чиста C-функциями или на asm'e писать.

valentin_191
давай мыло, вышлю класс для работы с ini дабы не писал то, что давно написано.
Автор: mihas83
Дата сообщения: 12.01.2004 14:02
Marvan

Цитата:
а мы ему ща посоветуем чиста C-функциями или на asm'e писать.

Вот этого не пробовал, но на C - эффективнее всего...
Функции, приведенные тобой, как раз используют его...
Автор: Arion
Дата сообщения: 12.01.2004 16:22

Цитата:
Функции, приведенные тобой, как раз используют его

Отчего же, для VB есть реализация подмножества Win32 API, правда несколько кривоватая.

Идея! Реализуем код работы с файлом в виде COM+ компонента на C++, реализуем интерфейс IDispatch а потом просто позовем его из скрипта на VB Script.
Автор: mihas83
Дата сообщения: 12.01.2004 16:54
Arion

Цитата:
Идея! Реализуем код работы с файлом в виде COM+ компонента на C++, реализуем интерфейс IDispatch а потом просто позовем его из скрипта на VB Script.

Вполне реально, но valentin_191 это не осилит...
Автор: ShIvADeSt
Дата сообщения: 13.01.2004 03:10

Цитата:
Реализуем код работы с файлом в виде COM+ компонента на C++

А не проще ли тогда будет либу написать, котороая все это будет делать ? И всем жаждущим ее дать. Будут использовать в своих ВБ приложениях.
Автор: mihas83
Дата сообщения: 13.01.2004 06:50
ShIvADeSt

Цитата:
А не проще ли тогда будет либу написать, котороая все это будет делать ? И всем жаждущим ее дать. Будут использовать в своих ВБ приложениях.

Действительно проще и быстрее, но все-равно, чтобы достичь "УНИВЕРСАЛЬНОСТИ" надо прилично повозиться...
Автор: Als
Дата сообщения: 13.01.2004 07:21
Если тебе про файл на VBA, то тебе сюда http://www.firststeps.ru/vba/excel/r.php?16
Кстати, на этом сайте много полезной информации (в т.ч. по работе с БД через VBA, Basic и т.п.)
Автор: mihas83
Дата сообщения: 13.01.2004 07:35
Als

Цитата:
файл на VBA, то тебе сюда

Судя по постам valentin_191 - сначала был VBA, a потом:
Цитата:
...как это можно сделать с TXT я имею в виду каждый раз новый номер и с новой строки.


Автор: valentin_191
Дата сообщения: 13.01.2004 08:12

Цитата:
Если тебе про файл на VBA, то тебе сюда http://www.firststeps.ru/vba/excel/r.php?16

Вы что издеваетесь как это сделать я знаю, А вот вопрос теперь в другом как можно загнать флекс грид в файл. Иестественно прочитать его.
Автор: mihas83
Дата сообщения: 13.01.2004 08:29
valentin_191

Цитата:
как можно загнать флекс грид в файл. Иестественно прочитать его.

Ну и аппетит у тебя... На каком формате ты, наконец, остановился?
Так это уже пахнет внедрением обьектов (как в OLЕ - CОМ: например, MS WORD)...
Тхт этого не "потянет"...
Автор: valentin_191
Дата сообщения: 13.01.2004 08:50
Да я сам не знаю У меня в роде как не получается сделать так что бы можно было путешествовать по базе нажатием двух кнопок "След" и "Предыдушь" Ну я и решил через хлекс грид всё сделал ну тоесть возможность редактирования теперь осталось сделать сохранение и загрузку но не где не могу найти инфу по этому поводу. Вы не могли бы подсказать а то просто через 1 здавать надо. Ну я имею ввиду кусочек кода. А в каком формате это без разницы.
Автор: Marvan
Дата сообщения: 13.01.2004 09:54
Если правильно понял данные находятся в ini?
Тогда создаём в ini секцию "Настройки" и ключ "Число записей", начением которого является число записей в таблице.
Далее в ini создаём секции "срока1" , "срока2" ... "срокаn" где n = "Число записей" и ключи в каждой секции "mail" , "url" и.т.д.
Значением каждого ключа является значение строки в таблице.
При загрузке таблицы считываем значение ключа "Число записей" в переменную n.
число строк в Gride = n
for i = 1 to n
grid.(строка(i),ячейка(1)).значение = получить значение из ini файла в секции "Строка" & i , для ключа "mail"
grid.(строка(i),ячейка(2)).значение = получить значение из ini файла в секции "Строка" & i , для ключа "url"
next

Естественно при добавлении, удалении или редактировании записи в gride - сохраняем переменную n как значение ключа "Число записей" и далее в цикле перечисляем все строки в gride и записываем их в качестве значений ключей "mail" , "url" секций "срока1" , "срока2" ... "срокаn", соответствующих порядковому номеру строки в gride.

Пример ini:
[Настройки]
Число записей=3

[Строка1]
mail="vasia@nm.com"
url="nm.com"
[Строка2]
mail="petia@xz.ru"
url="xz.ru"
[Cтрока3]
mail="mf@gdfd.zb"
url="gdfd.zb"
Автор: valentin_191
Дата сообщения: 13.01.2004 10:07
Так ты не ответил на главный вопрос КАК СОХРАНИТЬ И СЧИТАТЬ ЗНАЧЕНИЯ ИЗ ФАЙЛА В грид вот что у меня не получается.

Добавлено
А как можно записывать переменную Call WritePrivateProfileStringByKeyName("Main", "eMail", _
ПЕРЕМЕННАЯ А НЕ ПОСТОЯННОЕ ЗНАЧЕНИЕ, "c:\test.ini")
Автор: Marvan
Дата сообщения: 13.01.2004 11:59
смотри "Личный Ящик" туда скинул пример
Автор: valentin_191
Дата сообщения: 13.01.2004 17:24
А ты не знаешь где можно посмотреть расписанный файл просто завтро здавать преподы уроды передвинули дату сдачи с четверга на среду. Ну птоесть с обьяснениями. Зарание спасибо.
Автор: JArik
Дата сообщения: 13.01.2004 18:11
У меня почти такая же проблема. только я пишу на Delphi, подскажите пожалуйста способ как можно читать определенную строку из TextFile's(*.ini,*.txt) , тоесть у меня есть сплошной текст в этом файле, а точнее пакет, и мне надо , чтобы программа читала определенную строку из этого текста,например, по счету сверху.
И скажите нужен ли для Delphi 7 , компонент WinCrt.dcu для команд readln , writeln и т.д? И если нужен , то откуда можно взять ?

Добавлено
Вообщем я добился чего хотел :
for a:=1 to 7 do readln(outfile,x);

Так я смогу читать нужную мне строку сверху по счёту , если есть другие более простые или с большимим возможностями команды , то пишите.
Автор: valentin_191
Дата сообщения: 13.01.2004 21:10
Спасибо огромное Marvan всё работает но в место того что бы спокойно прочитать или сохранить он выполняет эи операции а потом пишет ошибку. И в сохранении и в чтении


Цитата:
Public Sub LoadGrid()
Kill "c:\test.ini"
mIni.Path = "c:\test.ini"
mIni.Section = "?????????"
mIni.Key = "????? ???????"
mIni.Value = Form1.FlexGrid.Rows - 1
For i = 0 To Form1.FlexGrid.Rows
mIni.Section = "??????" & i

mIni.Key = "Mail"
Form1.FlexGrid.row = i + 1' ВСЁ ВРЕМЯ ПИШЕТ ОШИБКУ СДЕСЬ НЕ ПОЙМУ В ЧЕМ ДЕЛО
Form1.FlexGrid.col = 1
mIni.Value = Form1.FlexGrid.Text

Автор: ShIvADeSt
Дата сообщения: 14.01.2004 01:59

Цитата:
Form1.FlexGrid.row = i + 1

а ты ряд не пробовал добавлять. Я вообще то точно не знаю как это работает, но вообще везде нумерация идет с нуля, а ты сразу пытаешься писать в 1 ряд, которого еще нет. Хотя может я не прав Но в Дельфи это так.
Автор: valentin_191
Дата сообщения: 14.01.2004 08:44
Это как что то не понял он как бы из ини файла читает скока запис5ей а потом в цикле по 1 пребовляет но по чему ошибка не пойму
Автор: Marvan
Дата сообщения: 14.01.2004 09:34
вместо
For i = 0 To Form1.FlexGrid.Rows
попробуй
For i = 1 To Form1.FlexGrid.Rows - 1

т.к. "i=0" - это первая строка таблицы - там у тебя теоретически шапка таблицы
Form1.FlexGrid.Rows - 1 - т.к. нумерация строк в гриде идёт с нуля.

P.s. добрый совет.
Не забудь снести все коментарии на английском из класса работы с ini, ну и лишние функции тоже, а то препод, мягко говоря, удивится.

Страницы: 1

Предыдущая тема: Передача данных между компьютерами.


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.