Что нового

Прочитать первую строчку из переменной хранящей в себе многострочный текст.

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Помогите, в буфере обмена есть текст, его я загоняю в переменную, из всего текста мне нужно знать что написано в первой строчке, как мне ее засунуть в отдельную переменную? :blink:
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Belfigor

Код:
MsgBox(0,"",StringLeft(ClipGet(),StringInStr(ClipGet(),@CR)))
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Belfigor
Или так:
Код:
#include <Array.au3>
$bak = ClipGet()
$aBak = StringSplit($bak, @CR)
_ArrayDisplay($aBak)
 
Автор
B

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Спасибо, приду домой потестю
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Belfigor
А так, мне кажется, лучше:
Код:
#include <Array.au3>

Dim $aBakNew[1]
$bak = ClipGet()
If $bak = "" Then Exit
$aBak = StringSplit($bak, @CRLF)
;_ArrayDisplay($aBak)
For $i = 1 To $aBak[0]
	If StringLen($aBak[$i]) <> 0 Then
	_ArrayAdd($aBakNew, $aBak[$i])
	$aBakNew[0] += 1
	EndIf
Next
_ArrayDisplay($aBakNew)
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
madmasles [?]
А так, мне кажется, лучше
Чем? задача намного проще, зачем ещё какие то массивы с циклами придумывать:

Код:
$sData = ClipGet()

;Метод используя строковые функции
$aFirstLine = StringLeft($sData, StringInStr($sData, @LF, 1, 1)-1)
ConsoleWrite($aFirstLine & @LF)

;Метод используя функции рег. выражения
$aFirstLine = StringRegExpReplace($sData, '\r?\n((?s).*?)$', '')
ConsoleWrite($aFirstLine & @LF)


В данном примере, вариант с рег. выражением, имеет приемущество в случае когда обрабатывается текст содержащий всего одну строчку.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
CreatoR
Абсолютно с Вами согласен в случае, если надо прочитать только первую строку. А если надо найти строку, содержащую, например, определенный текст.
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Или так : ( раз уж я сделал)
Код:
;Запоминаем в буфер  техт :
;111111111111
;222222222222
;333333333333
$sFirstLine=StringRegExpReplace(ClipGet(),'\r?\n[^\r\n]*','')
ConsoleWrite('$sFirstLine = ' & $sFirstLine & @LF)



Добавлено:
Сообщение автоматически объединено:

Судя по всему рег.выражение Creator'a будет работать быстрее из-за (?s).


Добавлено:
Сообщение автоматически объединено:

А так чуть проще и сохраняется скорость :
Код:
$sFirstLine=StringRegExpReplace(ClipGet(),'(?s)\r?\n.*','')
 
Верх