Snippets ( AutoIt String ): Difference between revisions

From AutoIt Wiki
Jump to navigation Jump to search
No edit summary
(No difference)

Revision as of 21:43, 8 December 2012


Please always credit an author in your script if you use their code. It is only polite.


_StringEqualSplit

Author: czardas








#include <Array.au3>
Global $aArray = _StringEqualSplit("abcdefghijklmnopqrstuvwxyz", 5)
_ArrayDisplay($aArray)

Func _StringEqualSplit($sString, $iNumChars)
    If (Not IsString($sString)) Or $sString = "" Then Return SetError(1, 0, 0)
    If (Not IsInt($iNumChars)) Or $iNumChars < 1 Then Return SetError(2, 0, 0)
    Return StringRegExp($sString, "(?s).{1," & $iNumChars & "}", 3)
EndFunc

Return To Contents

_StringGetChrCount

Author: GEOSoft







Check how many times the word 'test' appears in the string. 1 = Case-sensitive or 0 = Non Case-sensitive.


; Check how many times the word 'test' appears in the string. 1 = Case-sensitive or 0 = Non Case-sensitive.
ConsoleWrite(_StringGetChrCount("test teste test", "TEST", 0) & @CRLF)

Func _StringGetChrCount($sStr, $sChr, $iCase = 0)
	If $iCase <> 0 Then
		$iCase = 1
	EndIf
	StringReplace($sStr, $sChr, $sChr, 0, $iCase)
	Return @extended
EndFunc   ;==>_StringGetChrCount

Return To Contents

_StringEqualSplit

Author: czardas




Modified: guinness




Splits a string into an equal number of characters. The 0th index returns the number of items.


#include <Array.au3>

Global $aArray = _StringEqualSplit('abcdefghijklmnopqrstuvwxyz', 5)

_ArrayDisplay($aArray)

; By czardas & modified by guinness >> http://www.autoitscript.com/forum/topic/139260-autoit-snippets/page__st__20#entry992149
; Version: 1.00. AutoIt: V3.3.8.1
; Splits a string into an equal number of characters. The 0th index returns the number of items.
Func _StringEqualSplit($sString, $iNumChars)
    If (Not IsString($sString)) Or $sString = '' Then
        Return SetError(1, 0, 0)
    EndIf

    If (Not IsInt($iNumChars)) Or $iNumChars < 1 Then
        Return SetError(2, 0, 0)
    EndIf

    Local $tBuffer = DllStructCreate('char[' & $iNumChars & ']')

    DllCall('msvcrt.dll', 'ptr:cdecl', 'memset', 'ptr', DllStructGetPtr($tBuffer), 'int', 65, 'int', $iNumChars) ; By Zedna (StringRepeat)

    Local $aArray = StringRegExp(DllStructGetData($tBuffer, 1) & $sString, '(?s).{1,' & $iNumChars & '}', 3)

    $aArray[0] = Ubound($aArray, 1) - 1

    Return $aArray
EndFunc   ;==>_StringEqualSplit

Return To Contents

_StringIsNum

Author: smartee








ConsoleWrite(StringIsNum('Example') & @CRLF)
ConsoleWrite(StringIsNum('123456') & @CRLF)
ConsoleWrite(StringIsNum('Example & 123456') & @CRLF)

Func StringIsNum($sString)
    Return StringRegExp($sString, "^([0-9]*(\.[0-9]+){1}|[0-9]+(\.[0-9]*){0,1})$") = 1
EndFunc   ;==>StringIsNum

Return To Contents

_StringRemoveLine

Author: SmOke_N








Global $string = 'This is an example' & @CRLF & 'Of deleting a line' & @CRLF & 'If you know at least the beginning text of the line.'

MsgBox(0, 'Original', $string)

Global $deleteline = _StringRemoveLine($string, 'Of deleting')

MsgBox(0, 'Deleted Line', $deleteline)

Func _StringRemoveLine($hFile, $sDelete)
    If FileExists($hFile) Then $hFile = FileRead($hFile);Remove If FileExists($hFile) Then << only
    Local $nSNS = StringInStr($hFile, @CRLF & $sDelete) - 1
    Local $sSFH = StringLeft($hFile, $nSNS)
    Local $sRL = StringTrimLeft($hFile, StringLen($sSFH) + 2)
    Local $sLLEN = StringLen(StringLeft($sRL, StringInStr($sRL, @CRLF)))
    If Not $sLLEN Then $sLLEN = StringLen($sRL)
    Return $sSFH & StringTrimLeft($hFile, $sLLEN + $nSNS + 2)
EndFunc ;==>_StringRemoveLine()

Return To Contents

_StringReplaceBlank

Author: SmOke_N







Remove blank lines from a File


; Remove blank lines from a File
Local $sString = "I am a string" & @CRLF & @CRLF & _
		"With Empty Lines" & @CRLF & @CRLF & _
		"Please Remove those empty lines"

MsgBox(4096, "Before", $sString)

$sString = _StringReplaceBlank($sString, 1)

MsgBox(4096, "Replaced: " & @extended & " lines.", $sString)

Func _StringReplaceBlank($sString, $sSpaces = "")
	If $sSpaces Then
		$sSpaces = "\s*"
	EndIf

	$sString = StringRegExpReplace($sString, "(?s)\r\n" & $sSpaces & "\r\n", @CRLF)

	If @extended Then
		Return SetError(0, @extended, $sString)
	EndIf

	Return SetError(1, 0, $sString)
EndFunc   ;==>_StringReplaceBlank

Return To Contents

_StringTrimLeftIsEqual

Author: guinness







Strip a character/word from the leftmost part of a string.


ConsoleWrite(_StringTrimLeftIsEqual('C:\Test', 'C:\') & @CRLF) ; Returns Test as the string 'C:\' is stripped from the left.
ConsoleWrite(_StringTrimLeftIsEqual('C:\Test\', 'C') & @CRLF) ; Returns :\Test as the character 'C' is stripped from the left.
ConsoleWrite(_StringTrimLeftIsEqual('C:\Test\', 'Test') & @CRLF) ; Returns the initial string as the string 'Test' was not found to the leftmost part of the string.

; Version: 1.00. AutoIt: V3.3.8.1
; Strip a character/word from the leftmost part of a string.
Func _StringTrimLeftIsEqual($sString, $sStringTrim)
    Local $aStringTrim[2] = [0, StringLen($sStringTrim)]
    Return StringTrimLeft($sString, $aStringTrim[Number(StringLeft($sString, $aStringTrim[1]) == $sStringTrim)])
EndFunc   ;==>_StringTrimLeftIsEqual

Return To Contents

_StringTrimRightIsEqual

Author: guinness







Strip a character/word from the rightmost part of a string.


ConsoleWrite(_StringTrimRightIsEqual('C:\Test', 'Test') & @CRLF) ; Returns C:\ as the string 'Test' is stripped from the right.
ConsoleWrite(_StringTrimRightIsEqual('C:\Test\', '\') & @CRLF) ; Returns C:\Test as the character '\' is stripped from the right.
ConsoleWrite(_StringTrimRightIsEqual('C:\Test\', 'Test') & @CRLF) ; Returns the initial string as the string 'Test' was not found to the rightmost part of the string.

; Version: 1.00. AutoIt: V3.3.8.1
; Strip a character/word from the rightmost part of a string.
Func _StringTrimRightIsEqual($sString, $sStringTrim)
    Local $aStringTrim[2] = [0, StringLen($sStringTrim)]
    Return StringTrimRight($sString, $aStringTrim[Number(StringRight($sString, $aStringTrim[1]) == $sStringTrim)])
EndFunc   ;==>_StringTrimRightIsEqual

Return To Contents

_StringRegExpSplit

Author: dany







Split a string based on a regular expression.


; Split a string based on a regular expression.
; http://www.autoitscript.com/forum/topic/139260-autoit-snippets/page__st__120#entry1036533
#include <Array.au3> ; Only needed for example.
Global $sString = 'List:' & _
        '1. Bananas' & _
        '2. Coconuts' & _
        '3. Apples'
_ArrayDisplay(_StringRegExpSplit($sString, '[0-9]+\. ?')) ; Use the numbering (#.) to split on.
Global $bBinary = Binary($sString)
_ArrayDisplay(_StringRegExpSplit($bBinary, '3[0-9]2E(20)?'))

; #FUNCTION# ===================================================================
; Name...........: _StringRegExpSplit
; Description ...: Split a string according to a regular expression.
; Syntax.........: _StringRegExpSplit($sString, $sPattern)
; Parameters ....: $sString - String: String to split.
;                  $sPattern - String: Regular expression to split on.
; Return values .: Success - Array: Array of substrings, the total is in $array[0].
;                  Failure - Array: The count is 1 ($array[0]) and the full string is returned ($array[1]) and sets @error:
;                  |1 Delimiter not found.
;                  |2 Bad RegExp pattern, @extended contains the offset of the error in the pattern.
;                  |3 No suitable placeholder delimiter could be constructed.
; Author ........: dany
; Modified ......: czardas, AZJIO
; Remarks .......:
; Related .......:
; ==============================================================================
Func _StringRegExpSplit($sString, $sPattern)
	Local $sSplit, $sDelim, $aError[2] = [1, $sString]
	For $i = 1 To 31
		$sDelim &= Chr($i)
		If Not StringInStr($sString, $sDelim) Then ExitLoop
		If 32 = StringLen($sDelim) Then Return SetError(3, 0, $aError)
	Next
	$sSplit = StringRegExpReplace($sString, $sPattern, $sDelim)
	If @error Then Return SetError(2, @extended, $aError)
	If @extended = 0 Then Return SetError(1, 0, $aError)
	If Not IsBinary($sString) Then Return StringSplit($sSplit, $sDelim, 1)
	$sSplit = StringSplit($sSplit, $sDelim, 1)
	For $i = 2 To $sSplit[0]
		$sSplit[$i] = '0x' & $sSplit[$i]
	Next
	Return $sSplit
EndFunc   ;==>_StringRegExpSplit

Return To Contents