Что нового

StringRegExpReplace(): Убрать пробелы по краям массива

wisenlucky

Новичок
Сообщения
36
Репутация
0
Добрый день!

Помогите, пожалуйста, решить задачку сабжа.
Код:
#include <Array.au3>

Dim $sValues[5] = [" 10 "," 11","12 "," 13 ","14"]

$aValues = StringRegExpReplace($sValues, '(?m)^[\s]*[\s]*$', '')
ConsoleWrite($aValues&@CRLF)


Во-первых что-то не так с шаблоном. Пробовал разные вариации, за основу взял эту тему.

Во-вторых. Как заставить его работать с массивом?
 

sngr

AutoIT Гуру
Сообщения
1,011
Репутация
409
Задача не имеет решения. StringRegExpReplace это функция для работы со строками.
Код:
_ArrayTrim
 
Автор
W

wisenlucky

Новичок
Сообщения
36
Репутация
0
Задача не имеет решения. StringRegExpReplace это функция для работы со строками.
Я пока не встречал таких задач, которые не имеют решения :smile:
Можно к примеру сделать это с помощью цикла, пройдясь по каждой строке массива.

При помощи
Код:
_ArrayTrim
насколько я понимаю можно заменить символы только зная точное количество символов которые надо заменить.

Подскажите хотя бы шаблон. Если к примеру. нужно заменить значение в строке
Код:
$sValues[0]
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
Код:
#include <Array.au3>

Dim $sValues[5] = [" 10 ", " 11", "12 ", " 13 ", "14"]

For $i = 0 To UBound($sValues) - 1
	If StringRegExp($sValues[$i], '\A\s|\s\z') Then $sValues[$i] = StringStripWS($sValues[$i], 3)
Next

$sRes = ''
For $i = 0 To UBound($sValues) - 1
	$sRes &= '|' & $sValues[$i] & '|' & @LF
Next
MsgBox(0, 'Сообщение', $sRes)


Код:
#include <Array.au3>

Dim $sValues[5] = [" 10 ", " 11", "12 ", " 13 ", "14"]

For $i = 0 To UBound($sValues) - 1
	$sValues[$i] = StringStripWS($sValues[$i], 3)
Next

$sRes = ''
For $i = 0 To UBound($sValues) - 1
	$sRes &= '|' & $sValues[$i] & '|' & @LF
Next
MsgBox(0, 'Сообщение', $sRes)
 
Автор
W

wisenlucky

Новичок
Сообщения
36
Репутация
0
Как всё просто, когда уже видишь решение :smile:

Спасибо, AZJIO! :beer:
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,445
wisenlucky [?]
решить задачку сабжа
Для этого конкретного случая (целые числа окружены пробелами) можно так:
Код:
Dim $sValues[5] = [" 10 "," 11","12 "," 13 ","14"]

For $i = 0 To UBound($sValues) - 1
  $sValues[$i] = Int($sValues[$i])
Next
 
Автор
W

wisenlucky

Новичок
Сообщения
36
Репутация
0
Для этого конкретного случая (целые числа окружены пробелами) можно так:
Иногда встречаются и буквы, но спасибо за идею. Думаю
Код:
Int()
ещё пригодится. ;)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
wisenlucky [?]
Int() ещё пригодится.
Иногда встречаются и буквы
Аккуратнее с Int
Код:
Dim $sValues[5] = [' 1e0 ', ' 11g', 'r12h ', ' a13 ', 'rty14<>']

For $i = 0 To UBound($sValues) - 1
	ConsoleWrite('Int: ' & Int($sValues[$i]) & @LF)
	$sValues[$i] = StringRegExpReplace($sValues[$i], '[^\d]', '')
	ConsoleWrite('RegExpReplace: ' & $sValues[$i] & @TAB & StringIsDigit($sValues[$i]) & @LF)
Next
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Вариант:
Код:
#include <Array.au3>

Dim $aValues[5] = [" 10 ", " 11", "12 ", " 13 ", "14"]
_ArrayDisplay($aValues)
$aResult=StringSplit(StringStripWS(_ArrayToString($aValues,"|"),8),"|", 2)
_ArrayDisplay($aResult)

Есть правда ограничение: Элементы массива должны быть односложные.
Правда его легко можно обойти
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
AZJIO
А есть ли смысл делать проверку?
 
Верх