CSVfox
Get the job done.

±filter

Filtrowanie wejścia lub wyjścia wiersza danych

Opis

+filter Ogranicza odczyt wierszy danych z wejścia do pracy do tych, które spełniają warunek filtru.
-filter Zabrania zapisywania danych wyjściowych z wiersza danych, który nie spełnia ograniczenia filtrowania.

Ograniczenia filtrowania są opisywane za pomocą jednego lub dwóch operandów i operatora pomiędzy nimi.
Każdy z operandów może być [polem] lub {wyrażeniem}.
Przed porównaniem każde wyrażenie i każda wartość pola zostanie rozwiązana dla każdego wiersza, patrz Expressions and their Resolving. Następnie porównanie jest przeprowadzane z rozwiązanymi wartościami.

Wzór

±filter={Operand}Operator{Operand}

Przykłady użycia

+filter[3]
Wczytuje ten wiersz danych tylko wtedy, gdy trzecia kolumna nie jest pusta.
-filter[Status]!s{Locked}
Wyprowadza ten wiersz danych tylko wtedy, gdy kolumna "Status" nie jest dokładnie równa "Locked".
-filter[Owoc]!c{Apple/Pear}
Ten wiersz danych jest wyświetlany tylko wtedy, gdy tekst w kolumnie "Owoc" nie zawiera ani "Jabłko" ani "Gruszka".
-filter{NumericExpression1}ng{NumericExpression2}
Ten wiersz danych jest wyświetlany tylko wtedy, gdy wyrażenie liczbowe1 jest większe niż wyrażenie liczbowe2.
"NumericExpression1" i "NumericExpression2" są rozwiązane.

Wszystkie warunki filtrowania

Testy na pustość

-filter[Pole]
-filter[Pole]s
łańcuch, [Pole] nie jest puste.
-filter[Pole]!
-filter[Pole]!s
-filter[Pole]= ciąg znaków, [Pole] jest puste.
string, [Pole] jest puste.
-filter([Pole])
-filter([Pole])n
numeryczny, [Pole] nie jest puste i nie jest równe 0.
-filter([Pole])!
-filter([Pole])!n
-filter([Pole])=
numeryczny, [Pole] jest puste lub równe 0.

Testy literałów łańcuchowych (porównanie alfabetyczne)

-filter[Pole]e{wyrażenie} łańcuch, [Pole] i {wyrażenie} są równe.
-filter[Pole]!e[Inne pole] string, {Pole] i [Inne pole] nie są równe.
-filter[Pole]l{wyrażenie} string, [Pole] jest alfabetycznie mniejsze od {wyrażenia}.
-filter[Pole]!l[Inne pole] string, nie mniejszy, tzn. [Pole] jest alfabetycznie większe/równe od [Innego pola].
-filter[Pole]g{wyrażenie} string, [Pole] jest alfabetycznie większe niż {wyrażenie}.
-filter[Pole]!g[Inne pole] string, nie jest większy, tzn. [Pole] jest alfabetycznie mniejsze/równe od [Innego pola].
-filter[Pole]c{wyrażenie} string, [Pole] zawiera {wyrażenie}.
-filter Pole]!c{wyrażenie} string, [Pole] zawiera {wyrażenie}. string, [Pole] nie zawiera {wyrażenia}.
-filter Pole]b{wyrażenie} string, [Pole] zaczyna się od {wyrażenia}. string, [Pole] zaczyna się od {wyrażenia}.
-filter[Pole]!b{wyrażenie} string, [Pole] nie zaczyna się od {wyrażenia}.
-filter[Pole]f{wyrażenie} string, [Pole] kończy się na {wyrażenie}.
-filter[Pole]!f{wyrażenie} string, [Pole] nie kończy się na {wyrażeniu}.

Testy numeryczne (porównanie numeryczne)

-filter([Pole])n(7.3)
-filter([Pole])=(7.3)
Wartość [Pole] jest równa 7,3, zaokrąglona do maks. 27 miejsc po przecinku.
-filter([Pole])!n({3})
-filter([Pole])!=({3})
Wartość pola nie jest równa 3.
-filter([Pole])!([Inne pole])
-filter([Pole])!=([Inne pole])
Wartości [Pole] i [Inne pole] nie są równe.
-filter([Pole])g([Inne pole])
-filter([Pole])>([Inne pole])
Wartość [Pole] jest większa niż wartość [Inne pole].
-filter([Pole])l([Inne pole])
-filter([Pole])<([Inne pole])
[Pole] jest mniejsze niż [Inne pole].
-filter([Pole])!g[([Inne pole])
-filter([Pole])<=([Inne pole])
[Pole] nie jest większe, tzn. mniejsze/równe niż [InnePole].
-filter([Pole])!l([Inne pole])
-filter([Pole])>=([Inne pole])
[Pole] nie jest mniejsze, tj. większe/równe niż [InnePole].
-filter([Pole])gl([Pole1])/([Pole2])
-filter([Pole])<>([Pole1])/([Pole2])
[Pole] jest większe niż [Pole1] i mniejsze niż [Pole2].
-filter([Pole])egl([Pole1])/([Pole2])
-filter([Pole])<=>([Pole1])/([Pole2])
[Pole] jest równe lub większe niż [Pole1] i równe lub mniejsze niż [Pole2].
-filter([Pole])lg([Pole1])/([Pole2])
-filter([Pole])><([Pole1])/([Pole2])
[Pole] jest albo mniejsze niż [Pole1], albo większe niż [Pole2].
-filter([Pole])elg([Pole1])/([Pole2])
-filter([Pole])>=<([Pole1])/([Pole2])
[Pole] jest albo równe lub mniejsze od [Pole1], albo równe lub większe od [Pole2].
Filtry te działają, gdy [Pole] i [Inne pole] mają standardowe lokalne formatowanie liczbowe.
Jeżeli numeryczne [Pole] ma inny format, należy zastosować dodatkową podpowiedź dotyczącą formatowania odczytu ([Pole]).
Należy użyć np. "([Pole],)", jeżeli [Pole] ma przecinek dziesiętny, podczas gdy lokalny standard to przecinek dziesiętny. Patrz również Numeric Fields.

Testy String regex (regularne dopasowanie)

-filter[Pole]r/wyrażenie/ dopasowanie regex, [Pole] pasuje do {wyrażenia}.
-filter/#[Pole]r#wyrażenie# dopasowanie regex, [Pole] dopasowuje {wyrażenie} (z separatorem #).
-filter[Pole]!r/wyrażenie/ brak dopasowania regex, [Pole] nie pasuje do {wyrażenia}.
-filter/#[Pole]!r#wyrażenie# brak dopasowania regex, [Pole] nie pasuje do {wyrażenia} (z separatorem #).

Dla łańcuchów tryb "i" ustawia warunki na niewrażliwe na wielkość liter.

-filter[Pole]s{wyrażenie} [Pole] i {wyrażenie} są równe.
-filter/i[Pole]s{wyrażenie} [Pole] i {wyrażenie} są równe, porównanie nie uwzględnia wielkości liter.
-filter[Pole]!s[Inne pole] [Pole] i [Inne pole] nie są równe.
-filter/i[Pole]!s[Inne pole] [Pole] i [Inne pole] nie są równe, nie rozróżnia się wielkości liter.

Przy dzieleniu prawego operandu za pomocą separatora, po prawej stronie można podać wiele możliwości wyboru

-filter[Pole]s{abc} [Pole] jest porównywane z "abc".
-filter Pole]s{abc/abd/xyz} [Pole] jest porównywane z "abc". [Pole] jest porównywane z "abc", "abd" i "xyz".
-filter/#[Pole]s{abc#abd#xyz} [Pole] jest porównywane z "abc", "abd" i "xyz". [Pole] jest porównywane z "abc", "abd" i "xyz", z użyciem separatora "#".
-filter/:[Pole]s{abc:abd:xyz} [Pole] jest porównywane z "abc", "abd" i "xyz", przy użyciu separatora ":".
-filter/#[Pole]s{wyrażenie}#[abd]#[XYZ] [Pole] porównuje się z {wyrażeniem} oraz z polami [abd] i [XYZ], stosując separator "#".
-filter/i#[Pole]s{wyrażenie}#[abd]#[XYZ] [Pole] jest porównywane z {wyrażeniem}, oraz z polami [abd] i [XYZ];
porównanie nie uwzględnia wielkości liter i używa separatora "#".

Wiele pozytywnych wyborów jest OR-owane, wiele negatywnych wyborów jest AND-owane:

-filter[Pole]c{abc/def/ghi} [Pole] zawiera "abc" lub "def" lub "ghi".
-filter Pole]!c{abc/def/ghi} [Pole] zawiera "abc" lub "def" lub "ghi". [Pole] nie zawiera "abc", ani "def", ani "ghi".
(tzn. ani "abc", ani "def", ani "ghi").

Filtry można łączyć, tzn. do wyjścia (lub wejścia) można zastosować więcej niż jeden filtr. W tym przypadku wszystkie filtry muszą być dopasowane, aby umożliwić wejście lub wyjście wiersza danych.
Under construction, coming soon