Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Чтение из файла данных типа INI Добавлено: 09.01.04 00:53  

Автор вопроса:  Geor

Вот такая задачка:

Нужно из текстового файла считать данные

в INI данные в таком виде:

[раздел1]

параметр1=

параметр2=

...

параметрN=

[раздел2]

параметр1=

параметр2=

...

параметрN=

а у меня так:

[

параметр1=

параметр2=

...

параметрN=

]

[

параметр1=

параметр2=

...

параметрN=

]

заранее неизвестно сколько разделов

создается массив объектов и их свойствам присваиваются соответствующие значения

параметров много и не все параметры написаны в каждом разделе

т.е. в одном разделе может быть параметр5, а другом не быть

как организовать считывание данных из этого файла?

P.S.

можно ли сделать так, чтобы прочитав параметр Name присвотиь это a(i).Name,

прочитав параметр ID присвоить это a(i).ID и т.д.?

простой If Then для каждого параметра не предлагать

Ответить

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

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



Хранитель чата

ICQ: 137392264 

Вопросов: 8
Ответов: 557
 Web-сайт: www.hypertech.ru
 Профиль | | #1
Добавлено: 09.01.04 09:50
Можно коллекцию использовать
типа,
dim col as new Collection
col.add value, "name"
обращение
col("name")
 
есть идно НО. Ключ в коллекции должен быть уникальным.

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #2
Добавлено: 09.01.04 16:35

' Вот держи модуль, он могет все секции тебе выдать и все эллементы в секции.
' Может поможет, если ты об этом...
Option Explicit
'********************************************************************
'* Написано в 2002 году (Team HomeWork) *
'* e-mail: sne_pro@mail.ru *
'********************************************************************
Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal strSection As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileSectionNames Lib "kernel32.dll" Alias "GetPrivateProfileSectionNamesA" (ByVal lpszReturnBuffer As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private Declare Function WritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" (ByVal strSection As String, ByVal lpString As String, ByVal lpFileName As String) As Long
Private Declare Function GetProfStr Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal strSection As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Public Declare Function SetINI Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal strSection As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Long

 

Private Declare Function WPPStrToDelKey Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal strSection As String, ByVal lpKeyName As String, ByVal lpString As Long, ByVal lplFileName As String) As Long
Private Declare Function WPPSToDelSec Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal strSection As String, ByVal lpKeyName As Long, ByVal lpString As Long, ByVal lplFileName As String) As Long

 

' Получение значения ключа
Public Function GetINI(ByVal strSection As String, _
ByVal strKey As String, _
ByVal strDefault As String) As String

Dim slength As Long: GetINI = Space(512)
slength = GetProfStr(strSection, strKey, strDefault, GetINI, 512, StData.sIniPath)
GetINI = Left(GetINI, slength)
End Function

 

Public Function GetINIEx(ByVal strSection As String, _
ByVal strKey As String, _
ByVal strDefault As String, _
ByVal sFileName As String) As String

Ответить
Номер ответа: 3
Автор ответа:
 sne



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 09.01.04 16:37

Public Function GetINIEx(ByVal strSection As String, _
ByVal strKey As String, _
ByVal strDefault As String, _
ByVal sFileName As String) As String

Dim slength As Long: GetINIEx = Space(512)
slength = GetProfStr(strSection, strKey, strDefault, GetINIEx, &H200, sFileName)
GetINIEx = Left(GetINIEx, slength)
End Function

 

' Получение всех ключей и их значений, зная секцию
Public Function GetSecValues(ByVal sSection As String, _
ByRef outArray() As String, _
ByVal sFileName As String) As Long

Dim sBuffer As String: sBuffer = String$(&H4000, &H0)
GetSecValues = GetPrivateProfileSectiOn(sSection, sBuffer, &H4000, sFileName)

 

If Not GetSecValues > 1& Then GetSecValues = &HFFFF: Exit Function

 

sBuffer = Left$(sBuffer, GetSecValues - 1&)
outArray = Split(sBuffer, vbNullChar)
GetSecValues = UBound(outArray)
End Function

 

' Запись ключей и их значений в секции
Public Sub SetSecValues(ByVal sSection As String, _
ByRef inArray() As String, _
ByVal sFileName As String)

Call WritePrivateProfileSectiOn(sSection, ByVal Join(inArray, vbNullChar), sFileName)
End Sub

 

' Создание секции
Public Sub SetSectiOn(ByVal sSection As String, _
ByVal sFileName As String)

Call WritePrivateProfileSectiOn(sSection, " ", sFileName)
End Sub

 

' Получение имен всех секций
Public Function GetSections(ByRef outArray() As String, _
ByVal sFileName As String) As Long

Dim sBuffer As String: sBuffer = String$(&H400, &H0)
GetSections = GetPrivateProfileSectionNames(sBuffer, &H400, sFileName)

 

If Not GetSections > 1& Then GetSections = &HFFFF: Exit Function

 

sBuffer = Left$(sBuffer, GetSections - 1&)
outArray = Split(sBuffer, vbNullChar)
GetSections = UBound(outArray)
End Function

 

' Удаление ключа
Public Sub DelSecKey(ByVal sSection As String, _
ByVal sKey As String, _
ByVal sFileName As String)

Call WPPStrToDelKey(sSection, sKey, 0&, sFileName)
End Sub

 

' Удаление секции (полностью)
Public Sub DelSectiOn(ByVal sSection As String, _
ByVal sFileName As String)

Call WPPSToDelSec(sSection, 0&, 0&, sFileName)
End Sub

Ответить

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



Вопросов: 2
Ответов: 3
 Профиль | | #4 Добавлено: 11.01.04 11:51

sne

посмотри внимательнее мой вопрос, это не совсем INI!!!

в INI нужно писать имя раздела, у меня же этого нет!!!

--------------

boevik

наверно так и сделаю

только можно еще доделать:

создаешь коллекцию, загружаешь туда,

потом присваеваешь значения из коллекции массиву

и потом она удаляется.

--------------

кстати, что лучше:

загрузить рисунки в память (небольшие gif)

или подгружать их по мере надобности???

Ответить

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



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

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #5
Добавлено: 11.01.04 13:35

Sorry, не заметил, а вобще колекции немного медленней чем массивы, так что можно еще InStr искать vbCrLf & "[" или vbCrLf & "]", а потом циклом загонять все в динамический массив...

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

Ответить

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



Вопросов: 2
Ответов: 3
 Профиль | | #6 Добавлено: 14.01.04 01:07

такой кусок кода в sub'е

Dim c As Collection

Set c = New Collection

c.Add 15, "life"

MsgBox c("life") ' тут все ок

c("life") = 123 ' а здесь выдает ошибку

Run-time error '424':

Object required

Подскажите как быть?

P.S. что это за скрипт контрол и как его юзать?

Ответить

Страница: 1 |

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



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