|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
21.01.2010, 20:50 | #1 |
Регистрация: 21.01.2010
Сообщений: 5
|
Выборка из массива
Нужна помощь! В ворде С помощью макроса получил одномерный массив символьный фиксированной длины. Нужно из него получить другой массив, исключив из исходного массива одинаковые строки. Количество элементов массива заранее неизвестно (получается программно). для завершения программы необходима данная функция. А я в ступоре. Вроде все просто должно быть.
Заранее благодарен |
22.01.2010, 00:09 | #2 |
Балуюсь кодами
Участник клуба
Регистрация: 09.01.2009
Сообщений: 1,837
|
Количество элементов в одномерном массиве определяется функцией UBound(массив)
Лучше день потерять — потом за пять минут долететь!©
|
22.01.2010, 04:06 | #3 |
Регистрация: 21.01.2010
Сообщений: 5
|
Может я немного не так написал условие?.. Количество элементов в данном массиве я получаю макросом после некоторой обработки текста. Массив из строк есть, количество элементов в массиве известно. Нужно только исключить из массива одинаковые строки, причем используя не текстовое, а бинарное сравнение строк (то есть используя StrComp)
|
22.01.2010, 05:29 | #4 |
Особый статус
Участник клуба
Регистрация: 24.11.2008
Сообщений: 1,535
|
Аналогия в Excel
В принципе подошёл бы код от Pavel55.
Только тогда надо массив поместить в Excel. Или ту же идею использовать здесь.
Формула 1 (календарь чемпионата-2016): 26.11.2016 15:55 — Абу-Даби: http://ru.wikipedia.org/wiki/Гран-при_Абу-Даби — (квалификация)! Эфир: http://lion-tv.com/28-match-tv.html
|
22.01.2010, 06:10 | #5 |
Форумчанин
Регистрация: 29.09.2008
Сообщений: 378
|
Двойная работа
А что мешает еще при создании массива, не добавлять в него одинаковые элементы?
Если строк очень много, то для их хранения и обработки лучше использовать отдельный документ Word.
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Последний раз редактировалось Вождь; 22.01.2010 в 08:10. |
22.01.2010, 09:49 | #6 |
Регистрация: 21.01.2010
Сообщений: 5
|
согласен, сейчас думаю над тем, как формировать массив без повторений.
вообще полностью задача звучит так - необходимо в текущем документе найти все сокращения (то есть слова состоящие только из заглавных русских или английских букв) и из них сформировать таблицу трех столбцов, в которых - наййденные сокращения без повторения в первом столбце, во всех ячейках второго столбца знак тире, третий столбец пустой. Кто что посоветует с формирование массива без повторений?? Последний раз редактировалось andrkar; 22.01.2010 в 09:56. Причина: полное описание задачи |
22.01.2010, 10:37 | #7 | |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Цитата:
Код:
Чем шире угол зрения, тем он тупее.
Последний раз редактировалось SAS888; 22.01.2010 в 11:30. |
|
22.01.2010, 13:38 | #8 |
Балуюсь кодами
Участник клуба
Регистрация: 09.01.2009
Сообщений: 1,837
|
С использованием вспомогательного документа. В результате работы процедуры получим массив с не повторяющимися аббревиатурами. Последний элемент массива будет пустым.
Код:
Лучше день потерять — потом за пять минут долететь!©
|
22.01.2010, 18:10 | #9 |
Форумчанин
Регистрация: 25.08.2008
Сообщений: 159
|
Зачем создавать новый документ? чето слишком сложно для такой задачи...
Вместе с ViterAlex'ом можно и так: Код:
|
22.01.2010, 18:16 | #10 |
Регистрация: 21.01.2010
Сообщений: 5
|
Вариант решения задачи до получения массива
Option Explicit 'Объявлять переменные
Dim masssokr(1000) As String ' определение массива для найденных строк -------------------------------------------- это сделано в начале модуля, снаружи функций и подпрограмм. Далее - функция проверки совпадения элементов и добавления уникального в массив. Function CheckAdd_STR(STR As String) As Long Dim I As Long Static mass_N As Long For I = 0 To mass_N If STR = masssokr(I) Then CheckAdd_STR = mass_N Exit Function End If Next I masssokr(mass_N) = STR mass_N = mass_N + 1 CheckAdd_STR = mass_N End Function ------------------------------------------------------ Ну а теперь собственно сам код поиска сокращений в документе: Sub Find_Sokr Dim I As Long Dim Sokr_N As Long ' число найденных сокращений Selection.HomeKey Unit:=wdStory 'переходим к началу документа With Selection.Find 'Задаем условия для поиска .Text = "<[A-ZА-ЯЁ][A-ZА-ЯЁ]@>" 'комбинация подстановочных знаков, 'позволяющая выбирать слова, состоящие 'только из заглавных русских и английских 'букв .Forward = True 'направление поиска .Wrap = wdFindStop 'условие остановки поиска .MatchWildcards = True 'флаг, включающий использование подстановчных знаков End With Do While Selection.Find.Execute = True 'цикл поиска от начала до конца документа Selection.Find.ClearFormatting Sokr_N = CheckAdd_STR(Selection.Text) 'Счетчик уникальных элементов в массиве Loop End Sub ----------------------------------------------------------- необходимые данные находятся в массиве masssokr () размером Sokr_N Ну а далее уже можно с этими данным делать нужные манипуляции |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
выборка из массива | marchukav | Microsoft Office Excel | 5 | 26.11.2009 19:31 |
Выборка по двум критериям массива в Excel | Ultramax | Microsoft Office Excel | 1 | 26.11.2009 17:41 |
Выборка массива по битовой сетке | Sairaks | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 3 | 17.11.2009 19:36 |
Случайна выборка из массива | spectralw | Помощь студентам | 0 | 01.05.2009 21:03 |
выборка и сравнение из массива | Dennikid | Общие вопросы Delphi | 15 | 03.10.2008 09:25 |