Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Можно ли объявить документ массивом?

248
14 сентября 2007 года
Dmitry2064
590 / / 06.12.2006
Вот у меня есть файл словаря slovar.txt(или doc). В нем сидит много строк с названиями предприятий.
И есть процедура, которая должна обращаться к этому словарю как к массиву данных. Как мне указать идентификатор этого словаря/массива? Или надо считывать построчно и формировать массив из строк словаря уже в процессе выполнения макроса, загоняя каждую строчку в элемент массива?

Спасибо.
405
17 сентября 2007 года
Dmitrii
554 / / 16.12.2004
Цитата: Dmitry2064
... Или надо считывать построчно и формировать массив из строк словаря уже в процессе выполнения макроса, загоняя каждую строчку в элемент массива?...


Да, так и придётся делать. Только использовать для такой работы удобнее не массив, а специальный объект из состава WSH, который именуется [color=blue]Dictionary[/color].
Поищите на форуме темы по этому ключевому слову.

248
17 сентября 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: Dmitrii
Да, так и придётся делать. Только использовать для такой работы удобнее не массив, а специальный объект из состава WSH, который именуется [color=blue]Dictionary[/color].
Поищите на форуме темы по этому ключевому слову.



Интересно, надо будет почитать, какие там скрываются возможности. Спасибо.

248
19 сентября 2007 года
Dmitry2064
590 / / 06.12.2006
Такой вопрос.
Я собираю "избранные" строчки (As String) из исходного файла и потом их пишу в новый файл то мере нахождения.
А можно ли из этих нахождений сначала сформировать массив, а потом уже его (массив) сразу записать в файл?
Вот как у меня сделано на данном этапе:
Код:
Sub GetEntries()
'Dim Sl$(1000) [COLOR="DarkGreen"]заремил, т.к. пока не пишется[/COLOR]
Dim Pos$
 Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "^d": .Replacement.Text = "": .Forward = True: .Wrap = wdFindContinue: .Format = True [COLOR="DarkGreen"]'Вордовский спецсимвол кода поля (чтобы находилось то, что нужно) [/COLOR]
    End With
Selection.Find.Execute
i = 0
Open "D:\Entries.txt" For Append As #1
While Selection.Find.Found
    Pos$ = Selection.Text [COLOR="DarkGreen"]'найденная строка[/COLOR]
    rem Sl(i) = Pos$ [COLOR="DarkGreen"]'заремил, т.к. пока не пишется[/COLOR]
Print #1, Pos$
    i = i + 1
    Selection.Find.Execute
    Wend
rem Open "D:\Down\CPK\Slovar_Macros\Entries.txt" For Output As #1
rem Print #1, Sl$() [COLOR="DarkGreen"]''''' в этом месте ругается, т.к. не понимает запись[/COLOR]
Close #1
End Sub


Т.е. имеет ли смысл пытаться сначала загонять в массив, а потом скопом писать в файл? Станет ли от этого код более оптимальным? Или можно оставить и так?
405
20 сентября 2007 года
Dmitrii
554 / / 16.12.2004
Используйте вместо массива просто строковую переменную. Вот пример:
Код:
Sub Example()
Dim strDict As String
Dim hFile As Long
Const strFile = "C:\Temp\Test.txt"
strDict = vbNullString
i = 1
Do
    strDict = strDict & CStr(i) & vbCrLf
    i = i + 1
Loop While i < 11
hFile = FreeFile
Open strFile For Output Access Write As hFile
Print #hFile, strDict
Close hFile
End Sub
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог