Как отсортировать абзацы с текстом по годам?

Автор neft, 23 декабря 2011, 15:36

0 Пользователи и 1 гость просматривают эту тему.

neft

Вот возникла задачка со списком научных работ, скачанных с elibrary.ru.
Список работ не отсортирован по годам, и его нужно отсортировать по убыванию.
Как можно это сделать наиболее эффективно и просто в Writer?



[вложение удалено Администратором]

Рыбка Рио

Вот такой макрос может это сделать:

REM  *****  BASIC  *****

Sub Main
Doc = ThisComponent
SD = Doc.createSearchDescriptor()
SD.SearchRegularExpression = TRUE
StringsAr = Array("19[:digit:]{2}","20[:digit:]{2}")
M = ubound(StringsAr)
Dim Years(0) As Long
Dim Indexes(0) As Long

tLng=0
tInd=0
NewDoc = StarDesktop.loadComponentFromURL( "private:factory/swriter", "_blank", 0, Array() )
NewTK = NewDoc.Text.createTextCursor()
For i=0 to M
   SD.SearchString = StringsAr(i)
   Results = Doc.findAll(SD)
   N = Results.Count-1
   Redim Years(N) As Long
   Redim Indexes(N) As Long
   For j=0 to N
      Indexes(j)=j
   Next

   For j=0 to N
      Years(j) = cLng(Results(j).String)
   Next
   For k=0 to N
   For j=0 to N-1
      If Years(j)>Years(j+1) then
         tInd = Indexes(j)
         Indexes(j) = Indexes(j+1)
         Indexes(j+1) = tInd
         tLng = Years(j)
         Years(j) = Years(j+1)
         Years(j+1) = tLng
      Endif
   Next
   Next
   'For j=0 to N
   '   NewTK.String = cStr(Years(Indexes(j)))+chr(13)
   '   NewTK.gotoEnd(FALSE)
   'Next   
   For j=0 to N
      TK = Doc.Text.createTextCursorByRange(Results(Indexes(j)))
      TK.gotoStartOfParagraph(FALSE)
      TK.gotoEndOfParagraph(TRUE)
      NewTK.String = TK.String + chr(13)+chr(13)
      NewTK.gotoEnd(FALSE)
   Next
Next
NewDoc.setModified(FALSE)
End Sub


[вложение удалено Администратором]
ubuntu 12.04 + LibO3.6.0

neft

#2
Клио, спасибо за ответ.
Но там есть одна неприятность.
В тексте одной работы, кроме 2010 года, ещё 2 раза встречается число 2010, и макрос записывает 3 копии этой работы.
А если бы там ещё и страницы были бы С. 1970-1973, то было бы 5 копий.


PS. Можно легко менять порядок сортировки
ЦитироватьNewTK.gotoEnd(FALSE)      ' сортировка по возрастанию
NewTK.gotoStart(FALSE)      ' сортировка по убыванию