Что нового

Скопировать в буфер обмена случайный участок текста

rendo880

Новичок
Сообщения
4
Репутация
0
Всем привет!

Помогите пожалуйста копировать в буфер обмена случайный участок текста-

Например есть текст:

В лесу родилась елочка, в лесу она росла. Зимой и летом стройная - всегда она была.

Нужно получить в буфер случайный кусок этого текста:
Например : елочка, в лесу

Условие - что бы скопированный текст был не более 4x cлов ( А лучше что бы можно было регулировать в какой-то переменной количество слов)
 

Alecsis

Осваивающий
Сообщения
101
Репутация
41
Например есть текст:
В лесу родилась елочка, в лесу она росла. Зимой и летом стройная - всегда она была.
Нужно получить в буфер случайный кусок этого текста:
Например : елочка, в лесу
Условие - что бы скопированный текст был не более 4x cлов ( А лучше что бы можно было регулировать в какой-то переменной количество слов)
Что-то подобное пойдёт?
Код:
; ═════════════════════════════════
; копировать в буфер обмена случайный участок текста
; Например есть текст:
; В лесу родилась елочка, в лесу она росла. Зимой и летом стройная - всегда она была.
; Нужно получить в буфер случайный кусок этого текста:
; Например : елочка, в лесу
; Условие - что бы скопированный текст был не более 4x cлов
; (А лучше что бы можно было регулировать в какой-то переменной количество слов)
; ═════════════════════════════════
#pragma compile(UPX, True)
#pragma compile(x64, False)
#pragma compile(Console, True)
#pragma compile(FileDescription, 'Случайный участок текста')
; ───────────────────────────────
Opt('MustDeclareVars', True)
; ───────────────────────────────
#include <AutoItConstants.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <StringConstants.au3>
; ───────────────────────────────
Local Const _
  $csRExp = '(*UCP)(?isU)(\b\w+\b\W*?)+', _ ; считаем словом всё, что хотя бы одна буква + пробел(ы)/знак(и) препинания
  $ciMax  = 4
Local _
  $sText = 'В лесу родилась елочка, в лесу она росла. Зимой и летом стройная - всегда она была.', _
  $vRes,                              _ ; рез-т разбора по регэкспу
  $sExtract,                          _ ; выжимка из текста
  $sOutput,                           _ ; cообщение в MsgBox
  $iErr, $iErx,                       _ ; для сохр. @error и @extended
  $i, $j, $k, $iRC = 0                  ; традиционные индексы и код возврата

$vRes = StringRegExp($sText, $csRExp, $STR_REGEXPARRAYGLOBALMATCH)
$iErr = @error
$iErx = @extended
If $iErr Then
  $sOutput = StringFormat('Облом разбора входного текста\n@error = %d, @extended = %d', $iErr, $iErx)
  MsgBox($MB_ICONERROR, @ScriptDir, $sOutput)
  Exit
EndIf
;
$k = UBound($vRes)                      ; макс. возможный порядковый № слова для выбора
Do
  $i = Random(1, $k, 1)                 ; порядковый № первого выбираемого слова, целое > 0
  $j = Random(1, $ciMax, 1)             ; кол-во выбираемых слов
  $sExtract = i_SelWords($vRes, $i, $j) ; делаем выборку
  ClipPut($sExtract)
  $sOutput  = StringFormat('From = %u, Count = %u\nResult = "%s"', $i, $j, $sExtract)
  $iRC = MsgBox (BitOR($MB_ICONINFORMATION, $MB_OKCANCEL), @ScriptName, $sOutput)
Until $iRC = $IDCANCEL
Exit
;
#cs
────────────────────────────────
Выбор из массива заданного кол-ва идущих подряд элементов с указанной позиции.
Если всё нормально, выдаёт строку с заданным кол-вом слов,
если что-то пошлО не так — то пустую строку и устанавливает ненулевой код ошибки
────────────────────────────────
#ce
Func i_SelWords(ByRef Const $paWords, _ ; исходный массив, в нашем случае — отдельных слов
                            $pi1_st,  _ ; порядковый номер первого выбираемого эл-та (1+)
                            $piCount  _ ; кол-во выбираемых эл-тов (1+)
      )
  Local _
    $sResult = '',  _ ; результат выборки
    $iLast,         _ ; номер последнего выбираемого
    $iLastMax,      _ ; длина массива
    $i                ;

  ; Минимальная «защита от дурака»:
  ; – источник д.б. массивом
  ; – нач. порядковый № выбираемого слова д.б. числом > 0
  ; – кол-во выбираемых слов тоже д.б. числом > 0
  ;
  If Not IsArray($paWords)                    Then Return SetError(1, 0, $sResult)
  If Not IsNumber($pi1_st)  Or ($pi1_st  < 1) Then Return SetError(2, 0, $sResult)
  If Not IsNumber($piCount) Or ($piCount < 1) Then Return SetError(3, 0, $sResult)
  ;
  $iLast = $pi1_st + $piCount - 1       ; порядковый № посл. выбираемого слова
  $iLastMax = UBound($paWords)          ; кол-во слов в массиве
  ;
  For $i = $pi1_st To $iLast
    If $i > $iLastMax Then ExitLoop     ; защита от вылета за пределы массива
    $sResult &= $paWords[$i-1]          ; дополнить рез-т очередным словом
  Next
  Return $sResult
EndFunc         ; ===> i_SelWords
; ══════════════════════════════
 
Верх