CSVfox
Get the job done.

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.

Under construction, coming soon