system/csv2sql: Added (create sqlite database from a CSV file)

Signed-off-by: Dave Woodfall <dave@slackbuilds.org>

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
B. Watson 2022-07-10 22:26:54 +01:00 committed by Willy Sudiarto Raharjo
parent dd7cab6066
commit ed102aeab8
No known key found for this signature in database
GPG key ID: 3F617144D7238786
7 changed files with 393 additions and 0 deletions

6
system/csv2sql/README Normal file
View file

@ -0,0 +1,6 @@
csv2sql (create sqlite database from a CSV file)
csv2sql is a Ruby script for importing comma-separated-value files
into SQLite. It can read from a file or from standard input, and can
create a new database or insert new data into an existing one. It can
handle various character encodings; the default is UTF-8.

162
system/csv2sql/csv2sql.1 Normal file
View file

@ -0,0 +1,162 @@
.\" Man page generated from reStructuredText.
.
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "CSV2SQL" 1 "2022-07-09" "0.1" "SlackBuilds.org"
.SH NAME
csv2sql \- import data from CSV files into an SQLite database
.\" RST source for csv2sql(1) man page. Convert with:
.
.\" rst2man.py csv2sql.rst > csv2sql.1
.
.\" rst2man.py comes from the SBo development/docutils package.
.
.SH SYNOPSIS
.sp
csv2sql [\fB\-d\fP | \fB\-\-database\fP \fIdatabase\fP] [\fB\-e\fP | \fB\-\-encoding\fP \fIencoding\fP \fIINPUT\fP:\fIOUTPUT\fP] [\fB\-f\fP | \fB\-\-file\fP \fIfilename\fP] [\fB\-h\fP | \fB\-\-help\fP] [\fB\-t\fP | \fB\-table\fP \fItable\fP] [\fB\-v\fP | \fB\-\-verbose\fP] [\fB\-V\fP | \fB\-\-version\fP]
.SH DESCRIPTION
.sp
\fBcsv2sql\fP is a Ruby script for importing comma\-separated value files
into SQLite.
.sp
The destination table and database will automatically be created if
they do not already exist.
.sp
If the destination table already exists, then \fBcsv2sql\fP assumes that
it contains the same number of columns as the input data. The column
names do not need to match.
.SH OPTIONS
.INDENT 0.0
.TP
.BI \-d\fP,\fB \-\-database \ DATABASE
Database to import into. Default is \fIcsv2sql.db\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-e, \-\-encoding INPUT:OUTPUT
Input and output encodings. Default is \fIUTF\-8:UTF\-8\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.BI \-f\fP,\fB \-\-file \ FILENAME
CSV file to import. You can alternately read CSV data from standard input.
.TP
.B \-h\fP,\fB \-\-help
Print built\-in help message and exit.
.TP
.BI \-t\fP,\fB \-\-table \ TABLE
Table to import into. Default is the name of the file being imported from or \fIstdin\fP if CSV data is from standard input. Periods in the filename are replaced with underscores.
.TP
.B \-v\fP,\fB \-\-verbose
Print verbose output.
.TP
.B \-V\fP,\fB \-\-version
Print version number and exit.
.UNINDENT
.SH NOTE
.sp
\fBcsv2sql\fP assumes the first line of CSV data is a header giving the
column names. If your CSV file doesn\(aqt have column names (if the first
line is just CSV data), you\(aqll have to edit it and add the column
names for \fBcsv2sql\fP to work correctly with it.
.SH EXAMPLES
.INDENT 0.0
.IP 1. 3
Import widgets.csv into the default table (widgets_csv) and database (csv2sql.db):
.INDENT 3.0
.INDENT 3.5
.sp
.nf
.ft C
csv2sql \-f widgets.csv
.ft P
.fi
.UNINDENT
.UNINDENT
.IP 2. 3
Import standard input into the "foo" table within the "bar.db" database:
.INDENT 3.0
.INDENT 3.5
.sp
.nf
.ft C
cat widgets.csv | csv2sql \-t foo \-d bar.db
.ft P
.fi
.UNINDENT
.UNINDENT
.IP 3. 3
Import products.csv and more\-products.csv into the "products" table within the default database (csv2sql.db):
.INDENT 3.0
.INDENT 3.5
.sp
.nf
.ft C
csv2sql \-f products.csv \-t products
csv2sql \-f more\-products.csv \-t products
.ft P
.fi
.UNINDENT
.UNINDENT
.IP 4. 3
Export data from SQLite sorted by the "ProductName" column to output.csv:
.INDENT 3.0
.INDENT 3.5
.sp
.nf
.ft C
sqlite3 \-header \-csv csv2sql.db "SELECT * FROM products ORDER BY ProductName" > output.csv
.ft P
.fi
.UNINDENT
.UNINDENT
.UNINDENT
.SH COPYRIGHT
.sp
\fBcsv2sql\fP is open source software released under the MIT License. See:
.INDENT 0.0
.INDENT 3.5
.sp
.nf
.ft C
http://www.opensource.org/licenses/MIT
.ft P
.fi
.UNINDENT
.UNINDENT
.SH AUTHORS
.sp
\fBcsv2sql\fP was written by Matt Rideout.
.sp
This man page written for the SlackBuilds.org project
by B. Watson, and is licensed under the WTFPL.
.SH SEE ALSO
.sp
The csv2sql homepage: \fI\%http://csv2sql.org/\fP
.\" Generated by docutils manpage writer.
.

View file

@ -0,0 +1,68 @@
#!/bin/bash
# Slackware build script for csv2sql
# Written by B. Watson (urchlay@slackware.uk)
# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=csv2sql
VERSION=${VERSION:-0.1}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
ARCH=noarch
if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
exit 0
fi
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION
chown -R root:root .
chmod 644 *
# As shipped, csv2sql refuses to read stdin if it's a redirect from a file.
# This works:
# cat file.csv | csv2sql
# This doesn't work:
# csv2sql < file.csv
# ...which violates the principle of least surprise. The patch makes
# it read from stdin unconditionally, if no filename given (so the 2nd
# example will work). This is how standard UNIX utilities like cat,
# grep, sed have worked for decades.
# For those of you who don't like me patching the code, don't bother
# complaining via email/etc. I consider this a bugfix that enhances
# usability. Feel free to comment out the next line, if it bothers you:
patch -p1 < $CWD/stdin.diff
mkdir -p $PKG/usr/bin
install -oroot -groot -m0755 $PRGNAM $PKG/usr/bin/$PRGNAM
# man page by SlackBuild author.
mkdir -p $PKG/usr/man/man1
gzip -9c < $CWD/$PRGNAM.1 > $PKG/usr/man/man1/$PRGNAM.1.gz
PKGDOC=$PKG/usr/doc/$PRGNAM-$VERSION
mkdir -p $PKGDOC
cp -a README* $PKGDOC
cat $CWD/$PRGNAM.SlackBuild > $PKGDOC/$PRGNAM.SlackBuild
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE

View file

@ -0,0 +1,10 @@
PRGNAM="csv2sql"
VERSION="0.1"
HOMEPAGE="http://csv2sql.org/"
DOWNLOAD="https://github.com/mrideout/csv2sql/archive/v0.1/csv2sql-0.1.tar.gz"
MD5SUM="8efce15a7114dd9d1ed3c5b2023f32fa"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="sqlite3"
MAINTAINER="B. Watson"
EMAIL="urchlay@slackware.uk"

109
system/csv2sql/csv2sql.rst Normal file
View file

@ -0,0 +1,109 @@
.. RST source for csv2sql(1) man page. Convert with:
.. rst2man.py csv2sql.rst > csv2sql.1
.. rst2man.py comes from the SBo development/docutils package.
.. |version| replace:: 0.1
.. |date| date::
=======
csv2sql
=======
--------------------------------------------------
import data from CSV files into an SQLite database
--------------------------------------------------
:Manual section: 1
:Manual group: SlackBuilds.org
:Date: |date|
:Version: |version|
SYNOPSIS
========
csv2sql [**-d** | **--database** *database*] [**-e** | **--encoding** *encoding* *INPUT*:*OUTPUT*] [**-f** | **--file** *filename*] [**-h** | **--help**] [**-t** | **-table** *table*] [**-v** | **--verbose**] [**-V** | **--version**]
DESCRIPTION
===========
**csv2sql** is a Ruby script for importing comma-separated value files
into SQLite.
The destination table and database will automatically be created if
they do not already exist.
If the destination table already exists, then **csv2sql** assumes that
it contains the same number of columns as the input data. The column
names do not need to match.
OPTIONS
=======
-d, --database DATABASE
Database to import into. Default is *csv2sql.db*.
-e, --encoding INPUT:OUTPUT
Input and output encodings. Default is *UTF-8:UTF-8*.
-f, --file FILENAME
CSV file to import. You can alternately read CSV data from standard input.
-h, --help
Print built-in help message and exit.
-t, --table TABLE
Table to import into. Default is the name of the file being imported from or *stdin* if CSV data is from standard input. Periods in the filename are replaced with underscores.
-v, --verbose
Print verbose output.
-V, --version
Print version number and exit.
NOTE
====
**csv2sql** assumes the first line of CSV data is a header giving the
column names. If your CSV file doesn't have column names (if the first
line is just CSV data), you'll have to edit it and add the column
names for **csv2sql** to work correctly with it.
EXAMPLES
========
1. Import widgets.csv into the default table (widgets_csv) and database (csv2sql.db)::
csv2sql -f widgets.csv
2. Import standard input into the "foo" table within the "bar.db" database::
cat widgets.csv | csv2sql -t foo -d bar.db
3. Import products.csv and more-products.csv into the "products" table within the default database (csv2sql.db)::
csv2sql -f products.csv -t products
csv2sql -f more-products.csv -t products
4. Export data from SQLite sorted by the "ProductName" column to output.csv::
sqlite3 -header -csv csv2sql.db "SELECT * FROM products ORDER BY ProductName" > output.csv
COPYRIGHT
=========
**csv2sql** is open source software released under the MIT License. See::
http://www.opensource.org/licenses/MIT
AUTHORS
=======
**csv2sql** was written by Matt Rideout.
This man page written for the SlackBuilds.org project
by B. Watson, and is licensed under the WTFPL.
SEE ALSO
========
The csv2sql homepage: http://csv2sql.org/

19
system/csv2sql/slack-desc Normal file
View file

@ -0,0 +1,19 @@
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.
# Line up the first '|' above the ':' following the base package name, and
# the '|' on the right side marks the last column you can put a character in.
# You must make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
csv2sql: csv2sql (create sqlite database from a CSV file)
csv2sql:
csv2sql: csv2sql is a Ruby script for importing comma-separated-value files
csv2sql: into SQLite. It can read from a file or from standard input, and can
csv2sql: create a new database or insert new data into an existing one. It can
csv2sql: handle various character encodings; the default is UTF-8.
csv2sql:
csv2sql:
csv2sql:
csv2sql:
csv2sql:

19
system/csv2sql/stdin.diff Normal file
View file

@ -0,0 +1,19 @@
diff -Naur csv2sql-0.1/csv2sql csv2sql-0.1.patched/csv2sql
--- csv2sql-0.1/csv2sql 2015-03-07 13:20:09.000000000 -0500
+++ csv2sql-0.1.patched/csv2sql 2022-07-08 15:50:54.975335386 -0400
@@ -24,13 +24,9 @@
else
error "the CSV file that you specified (#{file}) does not exist. Exiting."
end
- # Otherwise, verify that standard input exists
+ # Otherwise, read from stdin
else
- if $stdin.fcntl(Fcntl::F_GETFL, 0) == 0
- verbose "Will read data from standard input."
- else
- error "you did not specify a CSV input file, or provide standard input. Exiting."
- end
+ verbose "Will read data from standard input."
end
end