AutoIt/Napisy (stringi)
Wstęp
edytujAutoIt wyposażony jest w bogaty zestaw funkcji służących do manipulacji łańcuchami znakowymi (stringami). W niniejszym rozdziale zostaną opisane sposoby tworzenia, edycji, testowania i zapisu stringów.
Co to jest string?
edytujString to nazwa typu danych służącego do przechowywania napisów (zmiennych łańcuchowych).
Stringi w AutoIt mogą zawierać wszystkie znaki ASCII o kodach od 0 do 255, a także znaki UNICODE o kodach od 0 do 65535 .
Maksymalna wielkość stringu to 2147483647 znaków.
Tworzenie stringów
edytujString można utworzyć ujmując jego elementy w cudzysłów lub apostrofy.
$a="to jest string"
$b='to też jest string'
Jeżeli chcemy żeby tworzony string zawierał cudzysłów lub apostrof należy go utworzyć tak:
$a="to jest 'cytat'" ;lub
$b='to jest "cytat"'
String można utworzyć łącząc dowolną ilość innych stringów za pomocą operatora &:
$a="To jest string"
$b="to też jest string"
$c=$a&" i "&$b&"!" ;wynik "To jest string i to też jest string!"
Na string można zmienić dowolne wyrażenie za pomocą funkcji String():
String(wyrażenie)
$str=String(7+8) ;wynik string "15"
$str=String(2=3) ;wynik string "False"
$str=String(True) ;wynik string "True"
Można także wczytać z dysku plik tekstowy np.:
$str=FileRead("Test.txt")
Dokładny opis w rozdziale: AutoIt/Czytanie i pisanie do plików.
Jednoznakowy string można uzyskać zamieniając na znak kod ASCII lub UNICODE:
Chr(ASCIIcode) ;zakres 0-255 ChrW(UNICODEcode) ;zakres 0-65535
MsgBox(0,"",Chr(66)&ChrW(666))
Tym sposobem możemy utworzyć string ze znaków, których nie da się wpisać z klawiatury.
Przy okazji wspomnijmy o funkcjach odwrotnych, tzn. takich, które zmieniają znaki na odpowiadające im kody:
Asc ( "znak" ) ;kod ASCII AscW ( "znak" ) ;kod UNICODE
MsgBox(0, "ASCII Ś:", Asc("Ś"))
MsgBox(0, "Unicode Ś:", AscW("Ś"))
Testowanie stringów
edytujW AutoIt istnieje zestaw funkcji umożliwiające uzyskanie pewnych informacji o stringach bez ingerencji w ich zawartość.
Określenie długości stringu
edytujStringLen
edytujStringLen("string")
Funkcja zwraca długość stringu (ilość znaków z których składa się string).
$a="QWERTY"
$d=StringLen($a) ;wynik 6
Sprawdzenie czy string jest zapisem liczby całkowitej
edytujStringIsInt
edytujStringIsInt("string")
Funkcja zwraca 1 gdy tak lub 0 gdy nie.
$a=StringIsInt("+42") ;wynik 1
$b=StringIsInt("-00") ;wynik 1
$c=StringIsInt("1.0") ;wynik 0, zapis z kropką dziesiętną - liczba zmiennoprzecinkowa
$d=StringIsInt(1.0) ;wynik 1, liczba 1.0 użyta jako string - niejawnie konwersja do stringu "1"
$e=StringIsInt("1+2") ;wynik 0, to nie zapis liczby lecz wyrażenia
Sprawdzenie czy string jest zapisem liczby zmiennoprzecinkowej
edytujStringIsFloat
edytujStringIsFloat("string")
Funkcja zwraca 1 gdy tak lub 0 gdy nie.
$b=StringIsFloat("7.") ;wynik 1 zero po kropce domyślne
$c=StringIsFloat("-.0") ;wynik 1
$d=StringIsFloat("3/4") ;wynik 0 to jest wyrażenie
$e=StringIsFloat("2") ;wynik 0 to jest liczba całkowita
$f=StringIsFloat(1.5) ;wynik 1, liczba 1.5 użyta jako string - niejawnie konwersja do stringu "1.5"
$g=StringIsFloat(1.0) ;wynik 0, liczba 1.0 użyta jako string - niejawnie konwersja do stringu "1"
Sprawdzenie czy string zawiera tylko znaki alfanumeryczne
edytujStringIsAlNum
edytujStringIsAlNum("string")
Funkcja zwraca 1 gdy tak lub 0 gdy nie.
$a=StringIsAlNum("a1B2") ;wynik 1
$a=StringIsAlNum(" a1B2") ;wynik 0, string zawiera także spacje
Sprawdzenie czy string zawiera tylko litery
edytujStringIsAlpha
edytujStringIsAlpha("string")
Funkcja zwraca 1 gdy tak lub 0 gdy nie.
$a=StringIsAlpha("Alpha") ;wynik 1
$a=StringIsAlpha("@lpha") ;wynik 0, string zawiera także znak @
Sprawdzenie czy string zawiera tylko małe litery
edytujStringIsLower
edytujStringIsLower("string")
Funkcja zwraca 1 gdy tak lub 0 gdy nie.
$a=StringIsLower("łąka") ;wynik 1
Sprawdzenie czy string zawiera tylko duże litery
edytujStringIsUpper
edytujStringIsUpper("string")
Funkcja zwraca 1 gdy tak lub 0 gdy nie.
$a=StringIsUpper("ŁĄKA") ;wynik 1
Sprawdzenie czy string zawiera tylko cyfry od 0 do 9
edytujStringIsDigit
edytujStringIsDigit("string")
Funkcja zwraca 1 gdy tak lub 0 gdy nie.
$a=StringIsDigit("12333") ;wynik 1
$b=StringIsDigit("1.5") ;wynik 0, string zawiera kropkę
$c=StringIsDigit("1 2 3") ;wynik 0, string zawiera także spacje
$d=StringIsDigit("") ;wynik 0, string pusty
Sprawdzenie czy string zawiera tylko cyfry szesnastkowe 0-9 i A-F
edytujStringIsXDigit
edytujStringIsXDigit("string")
Funkcja zwraca 1 gdy tak lub 0 gdy nie.
$a=StringIsXDigit("00FC") ;wynik 1
$b=StringIsXDigit("2570") ;wynik 1
$c=StringIsXDigit("a cafe") ;wynik 0, zawiera także spację
$d=StringIsXDigit(1 + 2.0) ;wynik 1, wyrażenie użyta jako string - niejawnie konwersja do stringu "3"
Sprawdzenie czy string zawiera tylko znaki o kodzie ASCII z zakresu 0-127
edytujStringIsASCII
edytujStringIsASCII ( "string" )
Funkcja zwraca 1 gdy tak lub 0 gdy nie.
$a=StringIsASCII("To jest jakis tekst") ;wynik 1
$b=StringIsASCII("To jest jakiś tekst") ;wynik 0, polska litera ś ma kod ASCII większy niż 127
Sprawdzenie czy string zawiera tylko "białe" znaki
edytujStringIsSpace
edytujStringIsSpace("string")
Funkcja zwraca 1 gdy tak lub 0 gdy nie.
$x =StringIsSpace(" " & @LF & Chr(11) & @TAB & " " & @CRLF) ;wynik 1
Porównywanie stringów z użyciem operatorów porównań
edytujSprawdzenie czy stringi są jednakowe (= lub ==):
$str1="To jest string"
$str2="to jest string"
$test=($str1=$str2) ;wartość True, operator = nie rozróżnia wielkości liter
$test=($str1==$str2) ;wartość False, operator == odróżnia wielkie litery od małych
Pozostałe operatory nie odróżniają dużych liter od małych.
Są to >, <, >=, <=, <>.
Ocena wartości stringu odbywa się wg kodów znaków poczynając od lewej strony do prawej (z uwzględnieniem tego że wielkość liter jest nierozróżnialna).
$str1="Alfa"
$str2="bb" ;string 2 ma większą wartość ponieważ kod litery b jest większy od A, stąd
$test=($str1>$str2) ;wartość False
$test=($str1<$str2) ;wartość True
$str1="Alfa"
$str2="Alfa1"
$test=($str1<$str2) ;wartość True
Porównywanie i przeszukiwanie stringów (funkcje AutoIt'a)
edytujPorównanie dwóch stringów
edytujStringCompare
edytujStringCompare ( "string1", "string2" [, flag] )
Funkcja ta działa bardzo podobnie do operatorów porównań.
Można jednak za pomocą parametru flag (opcjonalnego) ustalić sposób wartościowania stringów.
flag - określa czy mają być odróżniane duże litery od małych
0 - nierozróżniane z uwzględnieniem ustawień lokalnych np. Ó i ó nie są rozróżniane (domyślne)
1 - rozróżnianie wielkości liter
2 - nierozróżniane bez uwzględnienia ustawień lokalnych np. Ó i ó są rozróżniane
Funkcja zwraca:
0 - gdy stringi są jednakowej co do wartości
>0 - gdy pierwszy string ma większą wartość od drugiego
<0 - gdy pierwszy string ma mniejszą wartość od drugiego
Przykład:
$r=StringCompare("Żaba", "żaba") ;wynik 0
$r=StringCompare("Żaba", "żaba",1) ;wynik -1
$r=StringCompare("żaba", "Żaba",1) ;wynik 1
Poszukiwanie wewnątrz stringu mniejszego substringu
edytujStringInStr
edytujStringInStr ( "string", "substring" [, flag1 [, flag2 [, start [, koniec]]]] )
Znaczenie parametrów funkcji:
"string" - przeszukiwany string
"substring" - poszukiwany podstring
Pozostałe opcjonalnie:
flag1 - określa czy mają być odróżniane duże litery od małych
0 - nierozróżniane z uwzględnieniem ustawień lokalnych np. Ó i ó nie są rozróżniane (domyślne)
1 - rozróżnianie wielkości liter
2 - nierozróżniane bez uwzględnienia ustawień lokalnych np. Ó i ó są rozróżniane
flag2 - określa które wystąpienie podstringu uwzględnić, jeżeli użyjemy liczb ujemnych to string będzie przeszukiwany od końca (domyślnie 1)
start i koniec - określają od którego elementu ma się rozpocząć przeszukiwanie i na którym ma się skończyć (domyślnie cały string)
Funkcja zwraca pozycję podstringu, lub 0 gdy podstring nie został znaleziony.
Przykład:
$a="String w którym szukamy podstringu"
$b="stri"
$w=StringInStr($a,$b) ;wynik 1
$w=StringInStr($a,$b,0,2) ;wynik 28
$w=StringInStr($a,$b,1) ;wynik 28
$w=StringInStr($a,"m") ;wynik 15
$w=StringInStr($a,"m",0,-1) ;wynik 22
$w=StringInStr($a,"Ó",2) ;wynik 0
Przetwarzanie stringów (funkcje AutoIt'a)
edytujTworzenie stringu z określonej ilości początkowych znaków innego stringu
edytujStringLeft
edytujStringLeft ( "string", count )
"string" - string przetwarzany
count - ilość znaków stringu wynikowego
Funkcja zwraca string złożony z count pierwszych znaków stringu argumentu.
Jeżeli count jest większe od długości stringu argumentu, to będzie on zwrócony w całości.
Jeżeli count <= 0 to zwrócony będzie string pusty.
Przykład:
$w=StringLeft("Coś sobie wytniemy",5) ;wynik "Coś s"
Tworzenie stringu z określonej ilości końcowych znaków innego stringu
edytujStringRight
edytujStringRight ( "string", count )
"string" - string przetwarzany
count - ilość znaków stringu wynikowego
Funkcja zwraca string złożony z count ostatnich znaków stringu argumentu.
Jeżeli count jest większe od długości stringu argumentu, to będzie on zwrócony w całości.
Jeżeli count <= 0 to zwrócony będzie string pusty.
Przykład:
$w=StringRight("Coś sobie wytniemy",10) ;wynik "e wytniemy"
Tworzenie stringu z określonej ilości znaków z wnętrza innego stringu
edytujStringMid
edytujStringMid ( "string", start [, count] )
"string" - string przetwarzany
start - od którego elementu ma być tworzony string wynikowy
Opcjonalnie:
count - ilość znaków stringu wynikowego (domyślnie do końca stringu)
Funkcja zwraca string złożony z count znaków stringu argumentu poczynając od pozycji start.
Jeżeli nie użyjemy argumentu count to string będzie zwrócony do końca.
Jeżeli count jest większe od długości pozostałej części stringu argumentu, to będzie on zwrócony do końca.
Jeżeli count = 0 to zwrócony będzie string pusty, count < 0 jest ignorowane.
Przykład:
$w=StringMid("Coś sobie wytniemy",3) ;wynik "ś sobie wytniemy"
$w=StringMid("Coś sobie wytniemy",3,100) ;wynik "ś sobie wytniemy"
$w=StringMid("Coś sobie wytniemy",3,-1) ;wynik "ś sobie wytniemy"
$w=StringMid("Coś sobie wytniemy",3,5) ;wynik "ś sob"
Tworzenie stringu przez usunięcie określonej ilości początkowych elementów stringu argumentu
edytujStringTrimLeft
edytujStringTrimLeft ( "string", count )
"string" - string przetwarzany
count - ilość usuniętych początkowych znaków
Jeżeli count jest większe od długości stringu argumentu, to będzie zwrócony string pusty.
Jeżeli count <= 0 to będzie zwrócony cały string.
Przykład:
$w=StringTrimLeft("Coś sobie wytniemy",3) ;wynik " sobie wytniemy"
Tworzenie stringu przez usunięcie określonej ilości końcowych elementów stringu argumentu
edytujStringTrimRight
edytujStringTrimRight ( "string", count )
"string" - string przetwarzany
count - ilość usuniętych końcowych znaków
Jeżeli count jest większe od długości stringu argumentu, to będzie zwrócony string pusty.
Jeżeli count <= 0 to będzie zwrócony cały string.
Przykład:
$w=StringTrimRight("Coś sobie wytniemy",3) ;wynik "Coś sobie wytni"
Tworzenie stringu przez zamianę wszystkich liter stringu argumentu na małe
edytujStringLower
edytujStringLower ( "string" )
"string" - string przetwarzany
Funkcja uwzględnia ustawienia regionalne tzn. że działa prawidłowo także z polskimi literami. Przykład:
$w=StringLower("COŚ sOBIE zmienimy",3) ;wynik "coś sobie zmienimy"
Tworzenie stringu przez zamianę wszystkich liter stringu argumentu na duże
edytujStringUpper
edytujStringUpper ( "string" )
"string" - string przetwarzany
Funkcja uwzględnia ustawienia regionalne tzn. że działa prawidłowo także z polskimi literami.
Przykład:
$w=StringUpper("coś sOBIE zmienimy",3) ;wynik "COŚ SOBIE ZMIENIMY"
Tworzenie stringu przez zamianę w stringu argumentu jednego podstringu na inny
edytujStringReplace
edytujStringReplace ( "string", "szukany", "nowy" [, flag1 [, flag2]] )
"string" - string przetwarzany
"szukany" - podstring do zamiany
"nowy" - podstring na który zostanie zamieniony "szukany"
Pozostałe opcjonalnie:
flag1 - ile wystąpień podstringu "szukany" ma być zamienione na podstring "nowy" (domyślna warość 0, co oznacza że wszystkie wystąpienia)
flag2 - określa czy mają być odróżniane duże litery od małych
0 - nierozróżniane z uwzględnieniem ustawień lokalnych np. Ó i ó nie są rozróżniane (domyślne)
1 - rozróżnianie wielkości liter
2 - nierozróżniane bez uwzględnienia ustawień lokalnych np. Ó i ó są rozróżniane
UWAGA: funkcja dodatkowo w makrze @extended zwraca ilość wykonanych podmian
Przykład:
$w=StringReplace("Coś sobie zmienimy"," ","_") ;wynik "Coś_sobie_zmienimy"
$i=@extended ;wynik 2
$w=StringReplace("Coś sobie zmienimy"," ","_",1) ;wynik "Coś_sobie zmienimy"
$i=@extended ;wynik 1
Dodawanie znaku powrotu karetki
edytujStringAddCR
edytujStringAddCR ( "string" )
W zwracanym stringu przed każdym znakim nowej linii (Chr(10)), dodawany jest znak powrotu karetki (Chr(13)).
Przykład:
$old = "A" & @LF & "B" & @LF & "C"
$new = StringAddCR($old) ;$new będzie miał wartość wyrażenia "A" & @CR & @LF & "B" & @CR & @LF & "C"
Usuwanie znaku powrotu karetki
edytujStringStripCR
edytujStringStripCR ( "string" )
W zwracanym stringu usuwane są wszystkie znaki powrotu karetki (Chr(13)).
Przykład:
$old = "A" & @CR & @LF & "B" & @CR & @LF & "C"
$new = StringStripCR($old) ;$new będzie miał wartość wyrażenia "A" & @LF & "B" & @LF & "C"
Usuwanie białych znaków
edytujStringStripWS
edytujStringStripWS ( "string", flag )
W zwracanym stringu usuwane są białe znaki.
Białe znaki to znaki o kodach 0 (null), 9 (horyzontalny tabulator), 10 (nowa linia), 11 (wertykalny tabulator), 12 (wysuw strony), 13 (powrót karetki), 32 (spacja).
"string" - string wyjściowy
flag - określa zakres usuwania
1 - wiodące białe znaki
2 - końcowe białe znaki
4 - zbędne spacje między wyrazami (podwójne lub wielokrotne)
8 - wszystkie białe znaki
Zakresu mogą być łączone (np. 1+2+4 = 7)
Przykład:
$w=StringStripWS(" Coś sobie wytniemy ",1) ;wynik "Coś sobie wytniemy "
$w=StringStripWS(" Coś sobie wytniemy ",7) ;wynik "Coś sobie wytniemy"
$w=StringStripWS(" Coś sobie wytniemy ",8) ;wynik "Cośsobiewytniemy"
Odwrócenie kolejności znaków w stringu
edytujStringReverse
edytujStringReverse ( "string" {, flaga ] )
"string" - tekst przetwarzany
flaga - 0 (domyślnie) - odwrócenie w pełnym trybie UTF-16, 1 - o wiele szybszy sposób (tylko dla tekstu UCS-2)
Przykład:
MsgBox(0,"",StringReverse("AutoIt")) ;wyświetli "tIotuA"
Konwersja String -> Tablica, Tablica -> String
edytujTworzenie tablicy zawierającej w kolejnych komórkach fragmenty stringu
edytujStringSplit
edytujStringSplit ( "string", "separator" [, flaga] )
Funkcja zwraca jednowymiarową tablicę, w której komórkach znajdują się kolejne fragmenty stringu. Podział na fragmenty następuje w miejscach znaku (lub stringu) zadeklarowanego jako separator.
Domyślnie zwracana tablica w komórce [0] zawiera liczbę fragmentów, pozostałe komórki tablicy [1], [2], itd. zawierają kolejne fragmenty podzielonego stringu.
Jeśli w stringu nie znaleziono separatora to makro @error jest ustawiony na 1, wartość w komórce [0] wynosi 1, a w komórce [1] zwracany jest cały string.
"string" - string wyjściowy
"separator" - znak lub string separatora
flaga - (opcjonalnie) określa sposób podziału stringu:
flaga = 0 - (domyślnie), każdy znak w stringu separatora wyznacza miejsce podziału
flaga = 1 - cały string separatora jest potrzebne, aby wyznaczyć miejsce podział
flaga = 2 - fragmenty stringu są umieszczane w tablicy poczynając od komórki [0], aby poznać ilość fragmentów trzeba użyć funkcji Ubound()
flaga = 3 - połączenie flagi = 1 i 2.
Przykład:
$txt = "Poniedziałek,Wtorek,Środa,Czwartek,Piątek,Sobota,Niedziela"
$d = StringSplit($txt, ",")
MsgBox(0,"Test", $d[3]) ;wyświetli: Środa
$txt = "To\njest\ntekst\ndo\npodziału"
$a = StringSplit($txt, '\n', 1)
MsgBox(0,"Test", $a[3]) ;wyświetli: tekst
Tworzenie tablicy zawierającej w kolejnych komórkach kody ASCII kolejnych elementów stringu
edytujStringToASCIIArray
edytujStringToASCIIArray ("string", [start [, koniec, [kodowanie]]])
"string" - tekst konwertowany do tablicy kodów ASCII.
Pozostałe opcjonalnie:
start - pozycja w stringu, od której ma być rozpoczęta konwersja (domyślnie 0 czyli od początku).
koniec - do której pozycji (domyślnie StringLen("string") czyli do końca).
kodowania - zwrócona tablica będzie zawierać wartości określonego zestawu znaków:
0 - UTF-16 (domyślny)
1 - ANSI
2 - UTF-8
Wartość zwracana: tablica, gdzie każdy element to kod Unicode znaku w odpowiedniej pozycji.
Jeżeli wystąpi błąd zwracany jest łańcuch pusty.
Ciąg może zawierać znaki null Chr(0). Pojawią się one w zwróconej tablicy.
Przetwarzanie zatrzymuje się tylko wtedy, gdy osiągnięty zostanie koniec łańcucha lub określonego przez użytkownika zakresu.
Aby przekonwertować dane binarne do tablicy, należy najpierw przekonwertować je na string przy użyciu funkcji BinaryToString().
Przykład:
#include <Array.au3> ;dołączenie biblioteki Array.au3, aby uzyskać dostęp do funkcji _ArrayDisplay
Local $a=StringToASCIIArray("String->Tablica") ;przekonwertowanie stringu do tablicy
_ArrayDisplay($a) ;a tu funkcja _ArrayDisplay wyświetla zawartość tablicy
Utworzenie stringu ze znaków o kodach ASCII zawartych w kolejnych komórkach tablicy
edytujStringFromASCIIArray
edytujStringFromASCIIArray (array, [start [, koniec, [kodowanie]]])
array - tablica kodów ASCII do konwersji na znaki stringu
Pozostałe opcjonalnie:
start - numer indeksu, od którego rozpocznie się konwersja (domyślnie: 0, czyli od początku tablicy)
koniec - indeks do końca przetwarzania (domyślnie: UBound($array)-1, czyli do końca tablicy)
kodowania - tablica zawiera wartości określonego zestawu znaków:
0 - UTF-16 (domyślny)
1 - ANSI
2 - UTF-8
Wartość zwracana: string złożony ze znaków o kodach ASCII zawartych w komórkach tablicy.
Jeżeli wystąpi błąd zwracany jest pusty string, a makro @error przyjmuje wartość:
1 - parametr nie jest tablicą
2 - nieprawidłowy indeks początkowy
Zwracany łańcuch może zawierać znaki null Chr(0), ale nadal będzie typu string. Można przekształcić go za pomocą StringToBinary() w łańcuch wartości binarnych zachowując wszystkie dane.
Jeśli tworzymy tablicę ręcznie (w przeciwieństwie do używania tablicy zwróconej przez StringToASCIIArray()), to kody w tablicy muszą być określone w UNICODE.
Przykład:
Dim $tab[3]=[97, 98, 99]
MsgBox(0,"",StringFromASCIIArray($tab)) ;wyświetli "abc"
Formatowanie stringu
edytujW AutoIt można formatować stringi w sposób zbliżony do funkcji sprintf() w języku C. Służy do tego funkcja:
StringFormat
edytujStringFormat ( "łańcuch kontrolny", zmienna1 [, ... zmienna32] )
"łańcuch kontrolny" - string z opisem sposobu formatowania
zmienna... - zmienna lub wyrażenie podlegające formatowaniu
Ilość zmiennych jest ograniczona do 32, a żadna nie może być dłuższa niż 65535 znaków.
Funkcja zwraca string sformatowany, zgodnie z regułami podanymi w łańcuchu kontrolnym.
Format łańcucha kontrolnego:
%[flaga][szerokość][.dokładność]typ
flaga - opisuje sposób formatowania
szerokość - wielkość pola dla formatowanej zmiennej
Drugie pole opcjonalne specyfikacji formatu. Argument szerokości jest nieujemną liczbą całkowitą określającą minimalną liczbę drukowanych znaków.
Jeżeli liczba znaków w wartości wyjściowej jest mniejsza niż określona szerokość, dodawane są spacje na lewo lub na prawo od wartości, w zależności od tego, w jaki sposób jest określone wyrównanie za pomocą flagi (do lewej, czy do prawej).
Jeśli szerokość jest poprzedzona zerem, to przy wyrównywaniu w prawo dodawane są zera zamiast spacji.
Jeżeli liczba znaków w wartości wyjściowej jest większa od określonej szerokości, lub jeżeli szerokość nie jest podana, to wszystkie znaki wartości są drukowane (z uwzględnieniem specyfikacji precyzji).
dokładność - ilość miejsc po przecinku
typ - typ wartości wg którego będzie formatowany string
Uwaga:
Wszystko co znajduje się przed znakiem % lub po specyfikacji typy jest traktowane jak napis i będzie włączone jako część utworzonego stringu wynikowego.
Wyjątek stanowią pary znaków:
\n - znak nowego wiersza tak jak makro (@LF)
\r - powrót kursora jak (@CR)
\t - tabulator jak (@TAB)
\\ - znak ukośnika \
Typ: d, i - liczba całkowita dziesiętna ze znakiem. u - liczba całkowita dziesiętna bez znaku. o - liczba ósemkowa bez znaku. x - liczba szesnastkowa bez znaku, dodatkowe cyfry szesnastkowe abcdef. X - liczba szesnastkowa bez znaku, dodatkowe cyfry szesnastkowe ABCDEF. e, E - liczba rzeczywista ze znakiem (zapis wykładniczy) mająca formę [-]d.dddd e[znak]ddd, gdzie d jest jedną cyfrą dziesiętną, dddd to 1 lub więcej cyfr dziesiętnych, ddd to dokładnie trzy cyfray dziesiętne, znak to + albo -. Dla E w stringu wynikowym będzie użyta duża litera E zamiast małej e. f - liczba rzeczywista ze znakiem postaci [-]dddd.dddd, gdzie dddd to jedna lub więcej cyfr po przecinku. Liczba cyfr przed przecinkiem zależy od wielkości liczby i żądanej dokładności. g, G - liczba rzeczywista ze znakiem w formacie f lub e, w zależności od tego, który z zapisów jest bardziej zwarty dla danej wartości i precyzji. E format jest używany tylko wówczas, gdy wykładnik jest mniejsza niż -4 lub większa-równy argumentowi precyzji. Końcowe zera są obcinane i kropka dziesiętna pojawia się tylko wtedy, gdy po nim występują cyfry znaczące. s - łańcuch znakowy (string) Flaga: - wyrównanie do lewej, domyślnie wyrównanie do prawej + wstawia znak liczby (+ lub -), domyślnie wstawia tylko znak (-) dla liczb ujemnych 0 jeżeli szerokość pola jest większa od długości zapisu liczby to przy wyrównywaniu w prawo, przed pierwszą cyfrą będą dodawane zera (0) zamiast spacji, przy wyrównaniu w lewo, flaga ta jest ignorowana # z typem o - przed cyframi liczby ósemkowej wstawione zero # z typem x, X - przed cyframi liczby szesnastkowej wstawione 0x lub 0X # z typem e, E, f, g, G - zapis liczby zawiera zawsze kropkę dziesiętną, domyślnie kropka występuje tylko wtedy gdy są po niej cyfry znaczące # z typem c, d, i, u lub s - flaga jest ignorowana Dokładność: Trzecie pole opcjonalne specyfikacji formatu. Jest nieujemną liczbą całkowitą, poprzedzoną kropką (.). Określa ona liczbę znaków, jakie mają być wydrukowane, liczba miejsc po przecinku, lub liczbę cyfr znaczących. W przeciwieństwie do specyfikacji szerokości, specyfikacja dokładności może powodować obcięcie wartości wyjściowej lub zaokrąglania wartości zmiennoprzecinkowych. Jeżeli dokładność jest określona jako 0, a wartość do przeliczenia jest równa 0, string wyjściowy nie zawiera znaków np.: StringFormat ("% .0 d", 0) zwraca string pusty Dokładności dla danego typu: ------------------------------------------------------------------------------------------- d, i, u, o, x, X - dokładność określa minimalną liczbę cyfr do wydruku. Jeśli liczba cyfr w argumencie jest mniejsza niż dokładność, string wyjściowy jest uzupełniana zerami po lewej stronie. Nie jest on natomiast skracany gdy liczba cyfr przekracza dokładność. Wartość domyślna 1. e, E - dokładność określa liczbę cyfr, które mają być wydrukowane po przecinku. Ostatnio wydrukowane cyfra jest zaokrąglana. Wartość domyślna 6. Jeżeli dokładność wynosi 0 lub po kropce nie ma cyfr znaczących, to kropka dziesiętna nie jest drukowana. f - dokładność określa liczbę cyfr po przecinku. Wartość jest zaokrąglana do odpowiedniej liczby cyfr po kropce. Kropka wystąpi tyko wtedy, gdy po niej jest przynajmniej jedna cyfra znacząca. Wartość domyślna 6. g, G - dokładność określa maksymalną ilość cyfr znaczących. Wartość domyślna 6. s - dokładność określa maksymalną ilość znaków stringu wynikowego. Domyślnie są znaki dołączane do łańcucha wynikowego, aż do napotkania znak null (Chr(0)).
Przykład:
$n = 43951789;
$u = -43951789;
printf("d = %d", $n); '43951789' liczba całkowita
printf("u = %u", $n); '43951789' liczba całkowita bez znaku, dla wartości dodatnich
printf("u <0 = %u", $u); '4251015507' liczba całkowita bez znaku, dla wartości dodatnich
printf("f = %f", $n); '43951789.000000' liczba rzeczywista, format domyślny
printf("f = %.2f", $n); '43951789.00' liczba rzeczywista, dwa miejsca po kropce dziesiętnej
printf("o = %o", $n); '247523255' liczba ósemkowa
printf("s = %s", $n); '43951789' łańcuch znakowy (string)
printf("x = %x", $n); '29ea6ad' liczba szesnastkowa, małe cyfry
printf("X = %X", $n); '29EA6AD' liczba szesnastkowa, duze cyfry
printf("d = %+d", $n); '+43951789' liczba całkowita ze znakiem +
printf("d <0= %+d", $u); '-43951789' liczba całkowita ze znakiem -
$s = 'monkey';
$t = 'many monkeys';
printf("s = [%s]", $s); [monkey] string standardowo
printf("s = [%10s]", $s); [ monkey] równanie do prawej
printf("s = [%-10s]", $s); [monkey ] równanie do lewej
printf("s = [%010s]", $s); [0000monkey] równanie do prawej z uzupełnianiem zerami
printf("s = [%10.10s]", $t); [many monke] równaie do lewej z obcięciem do 10 znaków
printf("%04d-%02d-%02d\n", 2008, 4, 1); format daty rrrr-mm-dd
Func Printf($format, $var1, $var2=-1, $var3=-1)
If $var2=-1 Then
MsgBox(0,$format,StringFormat($format, $var1))
Else
MsgBox(0,$format,StringFormat($format, $var1, $var2, $var3))
EndIf
EndFunc
Ćwiczenia
edytuj1. Napisać skrypt wyświetlający ile procent znaków w wczytanym z dysku pliku tekstowym stanowi litera a (wielkość litery nie ma znaczenia). Skrypt powinien zawierać zdefiniowaną funkcję zliczającą w stringu ilość wystąpień dowolnego znaku.
2. Używając funkcji formatującej StringFormat napisać skrypt wyświetlający liczby -445.987, 0.00878, 2011 z wyrównaniem na kropce dziesiętnej jak poniżej:
-445.987 +0.00878 +2011.00
Przykładowe rozwiązania: AutoIt/Ćwiczenia dla zaawansowanych - przykładowe rozwiązania