Skip to content

Filtering Data

Data-Genie provides several ways to filter records, from simple rule-based filters to complex logical expressions.

Method 1: Rule-Based Filtering

Best for simple, reusable checks (e.g., checking for nulls or matching a pattern).

typescript
import { CSVReader, FilteringReader, FieldFilter, IsNotNull, PatternMatch, Job } from '@pujansrt/data-genie';

const reader = new CSVReader('data.csv');

const filter = new FilteringReader(reader)
  .add(new FieldFilter('email')
    .addRule(IsNotNull())
    .addRule(PatternMatch('.*@.*\\.com'))
    .createRecordFilter()
  );

await Job.run(filter, writer);

Method 2: Logical Expressions

Best for complex conditional logic involving multiple fields.

typescript
import { FilteringReader, FilterExpression, Job } from '@pujansrt/data-genie';

const filter = new FilteringReader(reader)
  .add(new FilterExpression(
    'record.age >= 18 && record.status === "active" && record.balance > 0'
  ).createRecordFilter());

await Job.run(filter, writer);

Method 3: Functional Filter

If you need pure JavaScript logic, you can use the TransformingReader as a filter by returning null or using a condition. However, for true filtering (discarding records), FilteringReader is the preferred tool.

typescript
const filter = new FilteringReader(reader)
  .add((record) => record.score > 50); // Direct predicate function

Released under the MIT License.