First, the D program, read_csv.d:
/**************************************************
File: read_csv.d
Purpose: A program to read CSV data from a file and
write it to standard output.
Author: Vasudev Ram
Date created: 2016-10-25
Copyright 2016 Vasudev Ram
Web site: https://vasudevram.github.io
Blog: http://jugad2.blogspot.com
Product store: https://gumroad.com/vasudevram
**************************************************/
import std.algorithm;
import std.array;
import std.csv;
import std.stdio;
import std.file;
import std.typecons;
int main()
{
try {
stderr.writeln("Reading CSV data from file.");
auto file = File("input.csv", "r");
foreach (record;
file.byLine.joiner("\n").csvReader!(Tuple!(string, string, int)))
{
writefln("%s works as a %s and earns $%d per year",
record[0], record[1], record[2]);
}
} catch (CSVException csve) {
stderr.writeln("Caught CSVException: msg = ", csve.msg,
" at row, col = ", csve.row, ", ", csve.col);
} catch (FileException fe) {
stderr.writeln("Caught FileException: msg = ", fe.msg);
} catch (Exception e) {
stderr.writeln("Caught Exception: msg = ", e.msg);
}
return 0;
}
It can be compiled with the command:
dmd read_csv.d
Next the Python program, StdinToPDF.py:
# StdinToPDF.py
# Read the contents of stdin (standard input) and write it to a PDF file
# whose name is specified as a command line argument.
# Author: Vasudev Ram - http://www.dancingbison.com
# This program is part of the xtopdf toolkit:
# https://bitbucket.org/vasudevram/xtopdf
import sys
from PDFWriter import PDFWriter
try:
with PDFWriter(sys.argv[1]) as pw:
pw.setFont("Courier", 12)
for lin in sys.stdin:
pw.writeLine(lin)
except Exception, e:
print "ERROR: Caught exception: " + repr(e)
sys.exit(1)
And last, the command-line pipeline that runs the two programs above:
read_csv | python StdinToPDF.py csv_output.pdf
After running the pipeline above, the final output (the CSV data, converted to PDF) will be in the file csv_output.pdf, which you can view in any suitable PDF viewer program, such as Foxit PDF Reader or Windows or evince on Linux.