AutoIt/Napisy (stringi)

Wstęp

edytuj

AutoIt 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?

edytuj

String 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

edytuj

String 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

edytuj

W AutoIt istnieje zestaw funkcji umożliwiające uzyskanie pewnych informacji o stringach bez ingerencji w ich zawartość.


Określenie długości stringu

edytuj

StringLen

edytuj
StringLen("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

edytuj

StringIsInt

edytuj
StringIsInt("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

edytuj

StringIsFloat

edytuj
StringIsFloat("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

edytuj

StringIsAlNum

edytuj
StringIsAlNum("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

edytuj

StringIsAlpha

edytuj
StringIsAlpha("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

edytuj

StringIsLower

edytuj
StringIsLower("string")

Funkcja zwraca 1 gdy tak lub 0 gdy nie.

$a=StringIsLower("łąka")      ;wynik 1


Sprawdzenie czy string zawiera tylko duże litery

edytuj

StringIsUpper

edytuj
StringIsUpper("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

edytuj

StringIsDigit

edytuj
StringIsDigit("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

edytuj

StringIsXDigit

edytuj
StringIsXDigit("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

edytuj

StringIsASCII

edytuj
StringIsASCII ( "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

edytuj

StringIsSpace

edytuj
StringIsSpace("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ń

edytuj

Sprawdzenie 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)

edytuj

Porównanie dwóch stringów

edytuj

StringCompare

edytuj
StringCompare ( "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

edytuj

StringInStr

edytuj
StringInStr ( "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)

edytuj

Tworzenie stringu z określonej ilości początkowych znaków innego stringu

edytuj

StringLeft

edytuj
StringLeft ( "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

edytuj

StringRight

edytuj
StringRight ( "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

edytuj

StringMid

edytuj
StringMid ( "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

edytuj

StringTrimLeft

edytuj
StringTrimLeft ( "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

edytuj

StringTrimRight

edytuj
StringTrimRight ( "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

edytuj

StringLower

edytuj
StringLower ( "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

edytuj

StringUpper

edytuj
StringUpper ( "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

edytuj

StringReplace

edytuj
StringReplace ( "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

edytuj

StringAddCR

edytuj
StringAddCR ( "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

edytuj

StringStripCR

edytuj
StringStripCR ( "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

edytuj

StringStripWS

edytuj
StringStripWS ( "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

edytuj

StringReverse

edytuj
StringReverse ( "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

edytuj

Tworzenie tablicy zawierającej w kolejnych komórkach fragmenty stringu

edytuj

StringSplit

edytuj
StringSplit ( "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

edytuj

StringToASCIIArray

edytuj
StringToASCIIArray ("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

edytuj

StringFromASCIIArray

edytuj
StringFromASCIIArray (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

edytuj

W AutoIt można formatować stringi w sposób zbliżony do funkcji sprintf() w języku C. Służy do tego funkcja:

StringFormat

edytuj
StringFormat ( "ł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

edytuj

1. 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