FieldedText TypeScript Library
    Preparing search index...

    Basic Write Example

    This example demonstrates how to write CSV data using the FieldedText library.

    1. Creates metadata for a product inventory CSV file
    2. Defines fields for Product name, Quantity, Price, and In Stock status
    3. Uses FtWriter to generate CSV output
    4. Writes multiple product records
    5. Handles special characters (commas, quotes) automatically
    npx tsx examples/basic-write/index.ts
    
    Writing product data:
    ====================

    Record 1: Widget, Small - $9.99
    Record 2: Gadget Pro - $149.95
    Record 3: Tool Set - $79.50
    Record 4: Premium "Elite" Package - $299.00

    Generated CSV:
    ==============
    Product,Quantity,Price,In Stock
    "Widget, Small",100,9.99,True
    Gadget Pro,50,149.95,True
    Tool Set,0,79.50,False
    "Premium ""Elite"" Package",25,299.00,True
    • Automatic quoting: Fields containing commas or quotes are automatically quoted
    • Quote stuffing: Embedded quotes are duplicated (CSV standard)
    • Number formatting: Prices formatted to 2 decimal places
    • Type safety: Fields are strongly typed
    // Basic Write Example
    // Demonstrates writing CSV data using the FieldedText library
    // This example matches the C# BasicWrite example - it loads meta from BasicExampleMeta.ftm

    import {
    FtStringWriter,
    FtWriter,
    FtXmlMetaSerialization,
    } from "@pbkware/fielded-text-web";

    // Meta as XML
    const metaXml = `<?xml version="1.0" encoding="utf-8"?>
    <FieldedText>
    <Field Name="PetName" />
    <Field DataType="Float" Name="Age" />
    <Field Name="Color" />
    <Field DataType="DateTime" Name="DateReceived" Format="d MMM yyyy" />
    <Field DataType="Decimal" Name="Price" />
    <Field DataType="Boolean" Name="NeedsWalking" />
    <Field Name="Type" />
    </FieldedText>
    `;

    // Define FieldNames
    const PetNameFieldName = "PetName";
    const AgeFieldName = "Age";
    const ColorFieldName = "Color";
    const DateReceivedFieldName = "DateReceived";
    const PriceFieldName = "Price";
    const NeedsWalkingFieldName = "NeedsWalking";
    const TypeFieldName = "Type";

    // Load meta
    const meta = FtXmlMetaSerialization.deserialize(metaXml);

    // Create output file path in temp directory
    const output = new FtStringWriter();

    // Create writer - single class instantiation!
    const writer = new FtWriter(meta, output);

    console.log("Writing pet data:");
    console.log("=================\n");

    // Write 1st Record
    writer.setFieldValueByName(PetNameFieldName, "Rover");
    writer.setFieldValueByName(AgeFieldName, 4.5);
    writer.setFieldValueByName(ColorFieldName, "Brown");
    writer.setFieldValueByName(DateReceivedFieldName, new Date(2004, 1, 12)); // Feb 12, 2004
    writer.setFieldValueByName(PriceFieldName, 80);
    writer.setFieldValueByName(NeedsWalkingFieldName, true);
    writer.setFieldValueByName(TypeFieldName, "Dog");
    writer.write();
    console.log("Record 1: Rover (Dog)");

    // Write 2nd Record
    writer.setFieldValueByName(PetNameFieldName, "Charlie");
    writer.setFieldValueByName(AgeFieldName, null);
    writer.setFieldValueByName(ColorFieldName, "Gold");
    writer.setFieldValueByName(DateReceivedFieldName, new Date(2007, 3, 5)); // Apr 5, 2007
    writer.setFieldValueByName(PriceFieldName, 12.3);
    writer.setFieldValueByName(NeedsWalkingFieldName, false);
    writer.setFieldValueByName(TypeFieldName, "Fish");
    writer.write();
    console.log("Record 2: Charlie (Fish)");

    // Read and display the generated CSV

    console.log("\nGenerated CSV:");
    console.log("==============");
    console.log(output.toString());