Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2011, 23:04   #1
wolf05632
Пользователь
 
Регистрация: 03.04.2011
Сообщений: 25
По умолчанию отсортировать элементы массива

Народ, не могу победить, помогите, пожалуйста:
есть четыре строки, которые надо вывести в строго определенном порядке:
строка 1
строка 2
строка 3
строка 4

Но! если строка начинается с определенного слова (пусть "если"), то эту строку нужно поставить в конец, а остальные передвинуть вверх, причем,если слово "если" встречается в двух или трех строках, то перенести их в конец тоже надо в хронологическом порядке. ПРИМЕР:
если строка 1
если строка 2
строка 3
строка 4

ВЫВОД:
строка 3
строка 4
если строка 1
если строка 2

пробовал через одномерный массив и метод пузырька, но в случае вышеуказанного примера выводит так:
строка 3
строка 4
если строка 2
если строка 1

КОД:
Код:
Dim Array(3) As String
    Array(0) = "если строка1"
    Array(1) = "если строка2"
    Array(2) = "строка3"
    Array(3) = "строка4"
     For i = 0 To 2
        For j = 1 - i To 0 Step -1
            If Array(j) Like ("если*") Then
               
' можно задать условие так:
' if left(Array(j),4)= "если" then
            
tmp = Array(j)
                
                Array(j) = Array(j + 1)
                Array(j + 1) = tmp
                End If
        Next j
    Next i
    With Word.Selection
    
    .TypeText (Array(0))
    .TypeParagraph
    .TypeText (Array(1))
    .TypeParagraph
    .TypeText (Array(2))
    .TypeParagraph
    .TypeText (Array(3))
    .TypeParagraph
    End With
Естесственно, я условно присвоил текст элементам массива. В реале там текстовые переменные.
ХЕЛП! СПАСИБО!
wolf05632 вне форума Ответить с цитированием
Старый 24.04.2011, 03:16   #2
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию

Код:
Dim Array(3) As String
    Array(0) = "если строка1"
    Array(1) = "если строка2"
    Array(2) = "строка3"
    Array(3) = "строка4"
'''''''''''''''''''''''''''''''''''''''''''''''
 For i = 0 To 3
             If Array(i) Like ("если*") Then
               Array(i)="2" & Array(i)
             else
               Array(i)="1" & Array(i)
             endif
      Next i
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


     For i = 0 To 2
        For j = 1 - i To 0 Step -1
            If Array(j) Like ("если*") Then
               
' можно задать условие так:
' if left(Array(j),4)= "если" then
            
tmp = Array(j)
                
                Array(j) = Array(j + 1)
                Array(j + 1) = tmp
                End If
        Next j
    Next i
    With Word.Selection
    
    .TypeText (mid(Array(0),2))
    .TypeParagraph
    .TypeText (mid(Array(1),2))
    .TypeParagraph
    .TypeText (mid(Array(2),2))
    .TypeParagraph
    .TypeText (mid(Array(3),2))
    .TypeParagraph
    End With
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 24.04.2011, 10:47   #3
wolf05632
Пользователь
 
Регистрация: 03.04.2011
Сообщений: 25
По умолчанию

shanemac51
Чета бред какой-то выводит...(((
wolf05632 вне форума Ответить с цитированием
Старый 24.04.2011, 11:38   #4
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,166
По умолчанию

может поможет
Упорядочить записи вмассиве согласно алфавита

Код:
' ---------------------------------------------- Пример 1
N = 5                              ' Число элементов массива
ReDim Mass(1 To N)

Mass(1) = "Варкалось"
Mass(2) = "Хливкие шорьки"
Mass(3) = "Пырялись по наве"
Mass(4) = "И хрюкотали зелюки"
Mass(5) = "Как мюмзики в мове"

' --------------------------------- Сортировка
For i = 1 To N
    For j = i To N
        If Mass(i) > Mass(j) Then
            sss = Mass(j)
            Mass(j) = Mass(i)
            Mass(i) = sss
        End If
    Next
Next

' --------------------------------- Выдача в MsgBox

sss = ""
For i = 1 To N
    sss = sss + Mass(i) + vbCrLf
Next
MsgBox sss

'Строка_массива_0 не существует, так как For i = 1 To N, то есть от одного
Строка_массива_1 = Mass(1)
Строка_массива_2 = Mass(2)
Строка_массива_3 = Mass(3)


' ---------------------------------------------- Пример 2
N = 5
ReDim Mass(1 To N)

Mass(1) = "ав"
Mass(2) = "адбмбвг"
Mass(3) = "адбахххх"
Mass(4) = "абвгд"
Mass(5) = "абв"

' --------------------------------- Сортировка
For i = 1 To N
    For j = i To N
        If Mass(i) > Mass(j) Then
            sss = Mass(j)
            Mass(j) = Mass(i)
            Mass(i) = sss
        End If
    Next
Next

' --------------------------------- Выдача в MsgBox

sss = ""
For i = 1 To N
    sss = sss + Mass(i) + vbCrLf
Next
MsgBox sss
Ципихович Эндрю вне форума Ответить с цитированием
Старый 24.04.2011, 20:03   #5
wolf05632
Пользователь
 
Регистрация: 03.04.2011
Сообщений: 25
По умолчанию

Ну, что ж . Как всегда, сам задал вопрос, сам отвечаю(не знаю насколько алгоритм правильный с точки зрения оптимизации, но работает!!!): слово "если" ставим в любые строки:
Код:
Dim Array_Noch(3) As String
    Array_Noch(0) = "если строка1"
    Array_Noch(1) = "строка2"
    Array_Noch(2) = "строка3"
    Array_Noch(3) = "строка4"
For j = 0 To 3
On Error GoTo q
  If Array_Noch(k) Like ("если*") Then
    
    For i = 0 + k To 2
    On Error GoTo 0

            tmp = Array_Noch(i)
            Array_Noch(i) = Array_Noch(i + 1)
            Array_Noch(i + 1) = tmp
            
                Debug.Print ("j="); j
                Debug.Print ("i="); i
               Debug.Print ("k="); k
                Debug.Print Array_Noch(0)
                Debug.Print Array_Noch(1)
                Debug.Print Array_Noch(2)
                Debug.Print Array_Noch(3)
        Next
        Else
        k = k + 1
        End If
        Next
q:
 With Word.Selection
    
    .TypeText (Array(0))
    .TypeParagraph
    .TypeText (Array(1))
    .TypeParagraph
    .TypeText (Array(2))
    .TypeParagraph
    .TypeText (Array(3))
    .TypeParagraph
    End With
wolf05632 вне форума Ответить с цитированием
Старый 24.04.2011, 20:09   #6
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,166
По умолчанию

не въехал в строке
Код:
If Array_Noch(k) Like ("если*") Then
откуда значение К возмётся??
Ципихович Эндрю вне форума Ответить с цитированием
Старый 24.04.2011, 22:04   #7
wolf05632
Пользователь
 
Регистрация: 03.04.2011
Сообщений: 25
По умолчанию

Ципихович Эндрю
вба язык - тупой язык. можно поставить 0+к. компилятор интерпритирует его как "типа ничто=типа ноль"
так что при первой итерации там "типа ноль"
wolf05632 вне форума Ответить с цитированием
Старый 24.04.2011, 22:10   #8
wolf05632
Пользователь
 
Регистрация: 03.04.2011
Сообщений: 25
По умолчанию

В итоге так:
Код:
Dim Array_Noch(3) As String
    Array_Noch(0) = "если строка1"
    Array_Noch(1) = "строка2"
    Array_Noch(2) = "строка3"
    Array_Noch(3) = "строка4"
For j = 0 To 3
  If Array_Noch(0 + k) Like ("если*") Then
    For i = 0 + k To 2
            tmp = Array_Noch(i)
            Array_Noch(i) = Array_Noch(i + 1)
            Array_Noch(i + 1) = tmp
            Next
        Else
        k = k + 1
        End If
        Next
 With Word.Selection
        .TypeText (Array(0))
    .TypeParagraph
    .TypeText (Array(1))
    .TypeParagraph
    .TypeText (Array(2))
    .TypeParagraph
    .TypeText (Array(3))
    .TypeParagraph
    End With
wolf05632 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Элементы матрицы. Все ненулевые элементы массива D(k) расположить в начале массива E(k) и подсчитать их к Вася Маклауд Помощь студентам 0 03.04.2011 17:21
Отсортировать элементы (язык Pelles C) Kotik Wasil Помощь студентам 1 17.01.2011 20:56
1.Найти в матрице первую строку, все элементы которой отрицательны 2.отсортировать элементы массива по в w0lf16 Помощь студентам 2 22.11.2009 15:47
Отсортировать отрицательные элементы Cdevelop Общие вопросы C/C++ 5 18.03.2009 22:31
переписать из массива в линейный двунаправленный список чётные элементы массива Black_Ak24 Помощь студентам 12 08.01.2008 00:44