CSV Generator Tool
<# .SYNOPSIS CSV Generator Tool .DESCRIPTION This script provides an interactive tool to create CSV structures, add columns and rows, and export the resulting CSV to a file. .NOTES File Name : CSVGenerator.ps1 Author : [Your Name] Prerequisite : PowerShell V5.1 or later Version : 1.0 Date : [Current Date] .EXAMPLE .\CSVGenerator.ps1 #> # Global variables $script:csvData = @() $script:columns = @() $script:csvFilePath = "$env:USERPROFILE\Desktop\Generated_CSV_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv" function Show-Menu { Clear-Host Write-Host "=== CSV Generator Tool ===" -ForegroundColor Cyan Write-Host "1. Define Columns" Write-Host "2. Add Row" Write-Host "3. View Current CSV Structure" Write-Host "4. Import Data from JSON" Write-Host "5. Generate Sample Data" Write-Host "6. Export CSV to File" Write-Host "7. Exit" } function Define-Columns { $script:columns = @() do { $columnName = Read-Host "Enter column name (or press Enter to finish)" if ($columnName -ne "") { $script:columns += $columnName } } while ($columnName -ne "") Write-Host "Columns defined: $($script:columns -join ', ')" -ForegroundColor Green } function Add-Row { if ($script:columns.Count -eq 0) { Write-Host "Please define columns first." -ForegroundColor Yellow return } $row = @{} foreach ($column in $script:columns) { $value = Read-Host "Enter value for '$column'" $row[$column] = $value } $script:csvData += [PSCustomObject]$row Write-Host "Row added successfully." -ForegroundColor Green } function View-CurrentCSV { if ($script:csvData.Count -eq 0) { Write-Host "No data available. Please add some rows first." -ForegroundColor Yellow return } $script:csvData | Format-Table -AutoSize } function Import-FromJSON { $jsonPath = Read-Host "Enter the path to the JSON file" if (-not (Test-Path $jsonPath)) { Write-Host "File not found." -ForegroundColor Red return } try { $jsonData = Get-Content $jsonPath -Raw | ConvertFrom-Json if ($jsonData -is [Array]) { $script:columns = $jsonData[0].PSObject.Properties.Name $script:csvData = $jsonData } else { $script:columns = $jsonData.PSObject.Properties.Name $script:csvData = @($jsonData) } Write-Host "Data imported successfully from JSON." -ForegroundColor Green Write-Host "Columns: $($script:columns -join ', ')" -ForegroundColor Green Write-Host "Number of rows: $($script:csvData.Count)" -ForegroundColor Green } catch { Write-Host "Error importing JSON: $_" -ForegroundColor Red } } function Generate-SampleData { if ($script:columns.Count -eq 0) { Write-Host "Please define columns first." -ForegroundColor Yellow return } $rowCount = Read-Host "Enter the number of sample rows to generate" if (-not [int]::TryParse($rowCount, [ref]$null)) { Write-Host "Invalid number. Please enter a valid integer." -ForegroundColor Red return } $script:csvData = @() for ($i = 1; $i -le [int]$rowCount; $i++) { $row = @{} foreach ($column in $script:columns) { $row[$column] = Get-SampleValue $column $i } $script:csvData += [PSCustomObject]$row } Write-Host "$rowCount sample rows generated successfully." -ForegroundColor Green } function Get-SampleValue($columnName, $rowNumber) { switch -Regex ($columnName.ToLower()) { "id|number" { return $rowNumber } "name" { return "Name$rowNumber" } "date" { return (Get-Date).AddDays($rowNumber).ToString("yyyy-MM-dd") } "email" { return "user$rowNumber@example.com" } "phone" { return "555-0$rowNumber" } "address" { return "$rowNumber Main St" } "city" { return "City$rowNumber" } "country" { return "Country$rowNumber" } "amount|price" { return [math]::Round((Get-Random -Minimum 10 -Maximum 1000), 2) } default { return "Value$rowNumber" } } } function Export-CSVToFile { if ($script:csvData.Count -eq 0) { Write-Host "No data to export. Please add some rows first." -ForegroundColor Yellow return } try { $script:csvData | Export-Csv -Path $script:csvFilePath -NoTypeInformation Write-Host "CSV exported successfully to: $script:csvFilePath" -ForegroundColor Green } catch { Write-Host "Error exporting CSV: $_" -ForegroundColor Red } } # Main program loop do { Show-Menu $choice = Read-Host "`nEnter your choice (1-7)" switch ($choice) { "1" { Define-Columns } "2" { Add-Row } "3" { View-CurrentCSV } "4" { Import-FromJSON } "5" { Generate-SampleData } "6" { Export-CSVToFile } "7" { Write-Host "Exiting program..." -ForegroundColor Yellow; break } default { Write-Host "Invalid choice. Please try again." -ForegroundColor Red } } if ($choice -ne "7") { Read-Host "`nPress Enter to continue..." } } while ($choice -ne "7")
This CSV Generator Tool includes:
- A menu-driven interface for easy navigation.
- Functions to interactively build CSV structures:
- Define columns
- Add rows manually
- View the current CSV structure
- Import data from JSON
- Generate sample data
- Export the CSV to a file
Key features:
- Column Definition:
- Allows users to define custom column names
- Manual Data Entry:
- Supports adding rows manually with guided input for each column
- Data Visualization:
- Provides a view of the current CSV structure in a tabular format
- JSON Import:
- Allows importing data from a JSON file to quickly populate the CSV
- Sample Data Generation:
- Automatically generates sample data based on column names
- Supports common data types like IDs, names, dates, emails, etc.
- CSV Export:
- Exports the generated data to a CSV file
This tool is particularly useful for:
- Developers needing to create test data in CSV format
- Data analysts creating sample datasets
- QA engineers generating CSV files for testing
- Anyone needing to quickly create structured CSV data
To use this script effectively:
- Run the script in PowerShell
- Use the menu options to build your CSV structure:
- Start by defining columns
- Add rows manually, import from JSON, or generate sample data
- View the current structure at any time
- When finished, export the CSV to a file
This script provides a user-friendly way to create CSV structures without having to manually write CSV syntax or use spreadsheet software. It’s especially helpful for creating test data or sample datasets quickly and easily.
Leave a Reply
Want to join the discussion?Feel free to contribute!