system/csvutils: Added (inspect/manipulate CSV data).

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
B. Watson 2022-01-26 14:04:52 -05:00 committed by Willy Sudiarto Raharjo
parent b7da3c85f0
commit b5e76f1459
No known key found for this signature in database
GPG Key ID: 3F617144D7238786
7 changed files with 264 additions and 0 deletions

16
system/csvutils/README Normal file
View File

@ -0,0 +1,16 @@
csvutils (inspect and manipulate CSV data)
csvutils is a set of command-line utilities that use libcsv to access
comma (or actually, any delimiter) separated data files. Included
programs:
csvcount - print the number of fields and rows in CSV files.
csvcheck - determine the validity of CSV data.
csvfix - convert malformed CSV data into well formed data, and convert
to CSV data with different quotes and/or delimiters.
csvgrep - search specific fields of CSV data for a pattern.
csvcut - output only the specified fields of a CSV file.
csvbreak - break a file into multiple pieces based on the value of the
specified field.
Each utility has a man page.

View File

@ -0,0 +1,51 @@
diff -Naur csvutils-0.9.3+20161218_e57951b/src/csvcheck.c csvutils-0.9.3+20161218_e57951b.patched/src/csvcheck.c
--- csvutils-0.9.3+20161218_e57951b/src/csvcheck.c 2022-01-26 02:05:12.660602834 -0500
+++ csvutils-0.9.3+20161218_e57951b.patched/src/csvcheck.c 2022-01-26 02:33:11.553450216 -0500
@@ -89,6 +89,8 @@
}
}
+int errcnt = 0;
+
void
check_file(char *filename)
{
@@ -112,6 +114,7 @@
fp = fopen(filename, "rb");
if (fp == NULL) {
fprintf(stderr, "Failed to open file %s: %s\n", filename, strerror(errno));
+ errcnt++;
csv_free(&p);
return;
}
@@ -121,18 +124,21 @@
if ((retval = csv_parse(&p, buf, bytes_read, NULL, NULL, NULL)) != bytes_read) {
if (csv_error(&p) == CSV_EPARSE) {
printf("%s: malformed at byte %lu\n", filename ? filename : "stdin", (unsigned long)pos + retval + 1);
+ errcnt++;
goto end;
} else {
printf("Error while processing %s: %s\n", filename ? filename : "stdin", csv_strerror(csv_error(&p)));
+ errcnt++;
goto end;
}
}
pos += 1024;
}
- if (csv_fini(&p, NULL, NULL, NULL) != 0)
+ if (csv_fini(&p, NULL, NULL, NULL) != 0) {
printf("%s: missing closing quote at end of input\n", filename ? filename : "stdin");
- else
+ errcnt++;
+ } else
printf("%s well-formed\n", filename ? filename : "data is");
end:
@@ -186,5 +192,5 @@
check_file(NULL);
}
- return EXIT_SUCCESS;
+ return (errcnt ? EXIT_FAILURE : EXIT_SUCCESS);
}

View File

@ -0,0 +1,99 @@
#!/bin/bash
# Slackware build script for csvutils
# Written by B. Watson (yalhcru@gmail.com)
# Licensed under the WTFPL. See http://www.wtfpl.net/txt/copying/ for details.
cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=csvutils
VERSION=${VERSION:-0.9.3+20161218_e57951b}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i586 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
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}
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.xz
cd $PRGNAM-$VERSION
chown -R root:root .
find -L . -perm /111 -a \! -perm 755 -a -exec chmod 755 {} \+ -o \
\! -perm /111 -a \! -perm 644 -a -exec chmod 644 {} \+
### Patches by SlackBuild author:
# Fix the csvgrep -i option (which was broken for both POSIX and PCRE
# regex matches, and only worked for fixed-string matches).
patch -p1 < $CWD/fix_i_option.diff
# Make csvcheck exit with nonzero status if any file failed the check.
patch -p1 < $CWD/csvcheck_exit_status.diff
# There's also a bug that makes cvsfix change this:
# "broken,"bad","line"
# to this:
# "broken,""bad","line"
# ...which csvcheck says is valid (which is another bug).
# It should be:
# "broken","bad","line"
###
make CPPFLAGS="$SLKCFLAGS -Wl,-s"
# N.B. non-canonical use of DESTDIR and MANDIR.
mkdir -p $PKG/usr/bin $PKG/usr/man/man1
make install DESTDIR=$PKG/usr/bin MANDIR=$PKG/usr/man/man1
# Amazingly, the man pages are already gzipped. Might be a first.
# Annoyingly, they're distributed gzipped, so I didn't patch them for
# typos (of which there are a few).
# pdf/*.pdf are just PDF copies of the man pages, don't install.
PKGDOC=$PKG/usr/doc/$PRGNAM-$VERSION
mkdir -p $PKGDOC
cp -a Changelog LICENSE 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="csvutils"
VERSION="0.9.3+20161218_e57951b"
HOMEPAGE="https://sourceforge.net/projects/csvutils/"
DOWNLOAD="https://slackware.uk/~urchlay/src/csvutils-0.9.3+20161218_e57951b.tar.xz"
MD5SUM="f312aa2c65db7b4ba45a3037c7a90be2"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES="libcsv"
MAINTAINER="B. Watson"
EMAIL="yalhcru@gmail.com"

View File

@ -0,0 +1,21 @@
diff -Naur csvutils-0.9.3+20161218_e57951b/src/csvgrep.c csvutils-0.9.3+20161218_e57951b.patched/src/csvgrep.c
--- csvutils-0.9.3+20161218_e57951b/src/csvgrep.c 2022-01-26 02:05:12.660602834 -0500
+++ csvutils-0.9.3+20161218_e57951b.patched/src/csvgrep.c 2022-01-26 02:22:34.393508136 -0500
@@ -788,7 +788,7 @@
#ifdef WITHOUT_PCRE
err("not compiled with pcre support");
#else
- re = pcre_compile(pattern, 0, &err_ptr, &rv, NULL);
+ re = pcre_compile(pattern, (ignore_case ? PCRE_CASELESS : 0), &err_ptr, &rv, NULL);
if (rv) {
fprintf(stderr, "Error parsing pattern expression: %s\n", err_ptr);
exit(EXIT_FAILURE);
@@ -798,7 +798,7 @@
#ifdef WITHOUT_POSIX
err("not compiled with posix support");
#else
- if ((rv = regcomp(&preg, pattern, REG_EXTENDED | REG_NOSUB )) != 0) {
+ if ((rv = regcomp(&preg, pattern, REG_EXTENDED | REG_NOSUB | (ignore_case ? REG_ICASE : 0))) != 0) {
regerror(rv, &preg, errbuf, sizeof errbuf);
fprintf(stderr, "Error parsing pattern expression: %s\n", errbuf);
exit(EXIT_FAILURE);

View File

@ -0,0 +1,48 @@
#!/bin/sh
# Create source tarball from git repo, with generated version
# number.
# Note that this script doesn't need to be run as root. It does
# need to be able to write to the current directory it's run from.
# Takes one optional argument, which is the commit or tag to create
# a tarball of. With no arg, HEAD is used.
PRGNAM=csvutils
CLONE_URL=https://github.com/rgamble/csvutils
# upstream doesn't use tags. csvutils was moved to github after
# this release.
OLDVER=0.9.3
set -e
GITDIR=$( mktemp -dt $PRGNAM.git.XXXXXX )
rm -rf $GITDIR
git clone $CLONE_URL $GITDIR
CWD="$( pwd )"
cd $GITDIR
if [ "$1" != "" ]; then
git reset --hard "$1" || exit 1
fi
GIT_SHA=$( git rev-parse --short HEAD )
DATE=$( git log --date=format:%Y%m%d --format=%cd | head -1 )
VERSION=$OLDVER+${DATE}_${GIT_SHA}
rm -rf .git
find . -name .gitignore -print0 | xargs -0 rm -f
cd "$CWD"
rm -rf $PRGNAM-$VERSION $PRGNAM-$VERSION.tar.xz
mv $GITDIR $PRGNAM-$VERSION
tar cvfJ $PRGNAM-$VERSION.tar.xz $PRGNAM-$VERSION
echo
echo "Created tarball: $PRGNAM-$VERSION.tar.xz"
echo "VERSION=$VERSION"

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------------------------------------------------------|
csvutils: csvutils (inspect and manipulate CSV data)
csvutils:
csvutils: csvutils is a set of command-line utilities that use libcsv to access
csvutils: comma (or actually, any delimiter) separated data files. Included
csvutils: programs: csvcount, csvcheck, csvfix, csvgrep, csvcut, csvbreak.
csvutils:
csvutils:
csvutils:
csvutils:
csvutils:
csvutils: