Что нового

[Данные, строки] Как добавить к строке символ несколько раз?

Ciber SLasH

Новичок
Сообщения
13
Репутация
0
Приветствую всех!
Можно ли как-то добавить к строке символ несколько раз не прибегая к циклам?
Например есть перемен. $a=50, есть строка $str. Как добавить к строке $str сим. '#' 50 раз (значение из $a) ?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Ciber SLasH,
Можно так.
Код:
Local $iCount = 50, $sStr = 'Test', $sSim = '#'

ConsoleWrite($sStr & StringReplace(StringFormat('%0' & $iCount & 'd', 0), '0', $sSim, 0, 2) & @LF)
ConsoleWrite($sStr & StringReplace(StringFormat('%' & $iCount & 's', ''), ' ', $sSim, 0, 2) & @LF)
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Или так
Код:
$str = "Да, можно прибавить 50#"
$a = 50
$ch = "#"
$str1 = "                                                                                                                                                            "

$str1 = StringMid(StringRegExpReplace($str1, ".", $ch), 1, $a)
ConsoleWrite($str & " " & $str1 & @LF)
; или
$str1 = StringMid(StringReplace($str1, " ", $ch), 1, $a)
ConsoleWrite($str & " " & $str1 & @LF)
 
Автор
C

Ciber SLasH

Новичок
Сообщения
13
Репутация
0
А почему в ConsoleWrite в конце добавляется @LF, а не @CRLF ?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
madmasles [?]
Круто, можно заменить встроенную UDF _StringRepeat:

Код:
$sSims = _StringRepeatEx('#', 50)
ConsoleWrite('Test: ' & $sSims & @LF)

Func _StringRepeatEx($sString, $iRepeatCount)
	If $iRepeatCount < 1 Then
		$iRepeatCount = 1
	EndIf
	
	Return StringReplace(StringFormat('%' & $iRepeatCount & 's', ''), ' ', $sString, 0, 2)
EndFunc


:laugh:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Ciber SLasH [?]
почему в ConsoleWrite в конце добавляется @LF, а не @CRLF ?
Строка переносится, а писать меньше. :smile:

CreatoR,
Я этот способ несколько лет назад не помню, где увидел, он мне понравился и я взял его себе в примеры.

Ответ #10, Отправлен: Ноябрь 04, 2011, 14:04:17. Плюс должен быть Ваш! ;D
 
Автор
C

Ciber SLasH

Новичок
Сообщения
13
Репутация
0
Выражаю всем благодарность, за помощь! :ok:
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
CreatoR
На офсайте от 2006 г, а я увидел от Melda23, он хвалил что это самый быстрый вариант, но типа не стоит очаровываться, скорее всего он имеет ограничение по длине строки.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
AZJIO [?]
скорее всего он имеет ограничение по длине строки.
У меня на WinXP 32 максимальное число повторов (не зависит от длины самой строки) 65537.
Код:
;~ Так работает:
$sSims = _StringRepeatEx('я', 1000)
$sSims = _StringRepeatEx($sSims, 65537)
ConsoleWrite(StringLen($sSims) & @LF)

;~ А так нет:
$sSims = _StringRepeatEx('я', 65538)
ConsoleWrite(StringLen($sSims) & @LF)

Func _StringRepeatEx($s_String, $i_RepeatCount)
    If $i_RepeatCount < 1 Then
        $i_RepeatCount = 1
    EndIf
    Return StringReplace(StringFormat('%' & $i_RepeatCount & 's', ''), ' ', $s_String, 0, 2)
EndFunc   ;==>_StringRepeatEx
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Хотели же поменять в UDF, но не поменяли.
http://www.autoitscript.com/forum/topic/147955-add-x-number-of-chr-to-a-string/?p=1050220
 
Верх