Filtrowanie i warunki poleceń
Warunki filtrowania i wykonywania poleceń
Istnieją dwa obszary zastosowań warunków:
- Jako kryterium filtrowania wierszy danych w czasie wejścia lub wyjścia, patrz ±filter.
- Jako warunek wstępny wykonania poleceń, proszę zobaczyć ±if/else/end.
Wszystkie filtrowania i oceny warunków są oparte na polach. Odbywa się wiersz po wierszu zgodnie z ogólnym trybem działania CSVfox i zawsze opiera się na bieżących danych aktualnego wiersza.
Kilka przykładów filtrów
- +filter(#)>(3)
- Odczytuje tylko bieżący wiersz danych, jeśli numer wiersza wejściowego jest większy niż 3.
Tzn. pierwsze trzy wiersze pliku wejściowego zostaną pominięte. - +filter[3]
- Odczytuje i przetwarza ten wiersz danych tylko wtedy, gdy trzecia kolumna nie jest pusta.
- -filter[Status]!={Zablokowane}
- Wyświetla bieżący wiersz danych tylko wtedy, gdy kolumna "Status" nie jest równa tekstowi "Locked".
- -filter[Fruit]={Apple}/{Pear}
- Wyświetla bieżący wiersz danych tylko wtedy, gdy tekst w kolumnie "Fruit" jest równy "Apple" lub "Pear".
- -filter(Wyrażenie liczbowe1)>(Wyrażenie liczbowe2)
- Wyświetla bieżący wiersz danych tylko wtedy, gdy NumericExpression1 jest większe niż NumericExpression2.
"NumericExpression1" i "NumericExpression2" są obliczane przed porównaniem.
Kilka przykładów poleceń warunkowych
- -if["Not in Navigation"]=Yes//set[*]=1//else//set[*]=0
- Jeśli pole "Not in Navigation" zawiera wartość "Yes", ustawia ją na "1", w przeciwnym razie na "0".
- -if[ThisField]={Expression}//set[ThatField]=Yesvalue//else//set[ThatField]=Novalue
- Wstawia do kolumny [ThatField] "Yesvalue" lub "Novalue", jeśli kolumna [ThisField] pasuje do "Expression", w przeciwnym razie.
"Expression", "Yesvalue" i "Novalue" są rozwiązywane. Warunki proszę sprawdzić poniżej. - -if(NumericExpression1)>=(NumericExpression2)//set[Field]=1//else//set[Field]=2
- W kolumnie [Field] wstawia "Yesvalue" lub "Novalue", jeśli "Expression1" jest większe lub równe "Expression2", w przeciwnym razie.
"Expression1", "Expression2", "Yesvalue" i "Novalue" są rozwiązywane.
Operandy i operatory warunku
Operandy
Operandem może być pojedyncze dosłowne pole CSV [Field], pole numeryczne CSV ([Field]), dosłowny ciąg znaków lub wyrażenie {Expression}, lub wyrażenie numeryczne a lub formuła (Expression).
Tak więc zawsze istnieje jakiś rodzaj nawiasów wokół dowolnego operandu.
Przed oceną warunku wszystkie pola są zastępowane ich rzeczywistymi wartościami, wszystkie formuły są obliczane, a wszystkie wyrażenia są rozwiązywane.
W poniższej tabeli "{Opn}" oznacza operand dowolnego rodzaju, zarówno pojedyncze pole, jak i typ liczbowy, literalny ciąg znaków lub wyrażenie.
{Op1} = lewy operand
{Op2} = prawy operand
{Op3} = kolejny prawy operand
Dostępne operatory warunków
Funkcja | Operator | Alternatywa Operator |
String | Numeryczny | Liczba Operandy prawe |
Składnia |
niepuste | ✓ | ✓ | 0 | {Op1} | ||
pusty | ! | n | ✓ | ✓ | 0 | {Op1}! |
równe | = | e | ✓ | ✓ | 1 * | {Op1}={Op2} |
większy | > | g | ✓ | ✓ | 1 * | {Op1}>{Op2} |
mniej | < | l | ✓ | ✓ | 1 * | {Op1}<{Op2} |
większe lub równe | >= | ge | ✓ | ✓ | 1 * | {Op1}>={Op2} |
mniejsze lub równe | <= | le | ✓ | ✓ | 1 * | {Op1}<={Op2} |
zaczyna się od | <# | b | ✓ | 1 * | {Op1}<#{Op2} | |
kończy się na | #> | f | ✓ | 1 * | {Op1}#>{Op2} | |
zawiera | <#> | c | ✓ | 1 * | {Op1}<#>{Op2} | |
dopasowanie regularne | @ | r | ✓ | 1 * | {Op1}@{Op2} | |
większe niż op1, i mniejsza niż op2 |
<> | gl | ✓ | 2 | {Op1}<>{Op2}/{Op3} | |
większe/równe op1, i mniejsze/równe op2 |
<=> | gel | ✓ | 2 | {Op1}<=>{Op2}/{Op3} | |
mniejsza niż op1, lub większe niż op2 |
>< | lg | ✓ | 2 | {Op1}><{Op2}/{Op3} | |
mniejsze/równe op1, lub większe/równe op2 |
>=< | leg | ✓ | 2 | {Op1}>=<{Op2}/{Op3} |
* można użyć więcej operandów podczas łączenia ich z ogranicznikami, patrz poniżej
Jak widać, dla każdego warunku dostępne są dwa różne operatory, forma standardowa i alternatywna, alfabetyczna.
Oba operatory działają tak samo. Chociaż standardowa forma może być bardziej czytelna i charakterystyczna, użycie wersji alfabetycznej może być konieczne, np. gdy procesor poleceń ma tendencję do błędnej interpretacji znaku porównania, takiego jak "<" i ">".
Negacja
Wszystkie operatory mogą być również używane w sposób zanegowany.
Negacja jest wyrażana poprzez dodanie znaku "a"!" lub "n" przed operatorem.
Tak więc "=" lub "e" oznacza "równy", podczas gdy "!=" lub "!e" oznacza "nie równy" (podobnie jak "n=" i "ne
)
.
W wielu przypadkach zanegowany operator jest równoważny innemu operatorowi bez negacji.
Tak więc negacją ">" (większy) jest "!>" (nie większy), co jest równoważne "<=" (mniejszy lub równy).
Nie dotyczy to jednak operatorów dosłownych "b" (zaczyna się od), "c" (zawiera) i "f" (kończy się na); tutaj negacja "!b" lub "nb" oznacza "nie zaczyna się od", "!c" lub "nc" oznacza "nie zawiera", a "!f" lub "nf" oznacza "nie kończy się na".
Również dopasowanie regularne "r" może być zanegowane przez "nr" lub "!@" (lub kombinację obu), co oznacza "nie pasuje".
Nadal jednak istnieje ważna różnica, jeśli chodzi o więcej niż jeden operand po prawej stronie.
Połączone prawe operandy
We wszystkich warunkach, gdy wymagany jest jeden prawy operand, można użyć więcej prawych operandów, połączonych ogranicznikiem (zazwyczaj "/").
W takim przypadku obowiązują następujące zasady:
- Wiele pozytywnych wyborów jest OR-owanych,
- Wiele zanegowanych wyborów jest AND-ed.
- Jeśli istnieje "pusty" wybór, proszę umieścić go jako pierwszy, tak aby lista wyborów zaczynała się od ogranicznika.
Proszę zobaczyć ten przykład z warunkiem filtrowania, który oznacza "zawiera":
-filter[Pole]c{abc} | [Pole] zawiera "abc". |
-filter[Field]c{abc}/{def}/{ghi} | Wiele pozytywnych wyborów: [Pole] zawiera "abc" lub "def" lub "ghi". |
-filter[Field]!c{abc}/{def}/{ghi} | Wiele wyborów negatywnych: [Pole] nie zawiera "abc", a także nie zawiera "def" , a także nie zawiera "ghi". (tj. ani "abc", ani "def", ani "ghi"). |
filter/:[Field]!c{abc}:{def}:{ghi} | To samo co powyżej, ale ze zmienionym separatorem (":" zamiast "/") |
Proszę nie zapomnieć o "ucieczce" wszystkich nawiasów, które nie są gramatyczną częścią identyfikatora pola, formuły lub wyrażenia formatującego, tj. zastąpieniu wszystkich dosłownych znaków (, ), [, ], {, }, <, > przez \(, \), \[, \], \{, }, \<, lub \>.
W przypadku ciągów znaków, tryb "i" ustawia warunki bez rozróżniania wielkości liter
W przypadku porównywania ciągów bez rozróżniania wielkości liter, tryb "i" można zastosować na dwa sposoby:
-filter[Pole]={wyrażenie} | [Pole] i {wyrażenie} są równe. |
-filter/i[Pole]={wyrażenie} -filter[Pole]i={wyrażenie} |
[Pole] i {wyrażenie} są uważane za równe, ale w porównaniu nie jest rozróżniana wielkość liter. |
-filter[Pole]!=[Inne pole] | [Pole] i [Inne pole] nie są równe. |
-filter/i[Pole]!=[Inne pole] -filter Pole]!i=[Inne pole] |
[Pole] i [Inne pole] nie są równe, porównanie nie uwzględnia wielkości liter. |