input;
while( io.ReadCSV( row ) ) {
- if ( ! Skip( row ) ) {
+ if ( ! Skip( io, row ) ) {
input.push_back( row );
}
}
diff --git a/csvfix/src/csved_trim.cpp b/csvfix/src/csved_trim.cpp
old mode 100644
new mode 100755
index 3662ac7..71ffc0c
--- a/csvfix/src/csved_trim.cpp
+++ b/csvfix/src/csved_trim.cpp
@@ -36,6 +36,8 @@ const char * const TRIM_HELP = {
" -f fields\tfields to trim (default is all)\n"
" -l\t\ttrim leading whitespace\n"
" -t\t\ttrim trailing whitespace\n"
+ " -a\t\tremove all whitespace\n"
+ " -s\t\ttrim all multiple whitespace to single space\n"
" -w widths\tspecifies widths to truncate fields to\n"
"#ALL,SKIP,PASS"
};
@@ -52,6 +54,8 @@ TrimCommand :: TrimCommand( const string & name,
AddFlag( ALib::CommandLineFlag( FLAG_TRLEAD, false, 0 ) );
AddFlag( ALib::CommandLineFlag( FLAG_TRTRAIL, false, 0 ) );
AddFlag( ALib::CommandLineFlag( FLAG_WIDTH, false, 1 ) );
+ AddFlag( ALib::CommandLineFlag( FLAG_ALL, false, 0 ) );
+ AddFlag( ALib::CommandLineFlag( FLAG_SINGLE, false, 0 ) );
}
//----------------------------------------------------------------------------
@@ -89,6 +93,13 @@ int TrimCommand :: Execute( ALib::CommandLine & cmd ) {
GetWidths( cmd.GetValue( FLAG_WIDTH ) );
}
+ mTrimAll = cmd.HasFlag( FLAG_ALL );
+ mTrim2Single = cmd.HasFlag( FLAG_SINGLE );
+
+ if ( mTrimAll && mTrim2Single ) {
+ CSVTHROW( "Cannot use both " << FLAG_ALL << " and " << FLAG_SINGLE );
+ }
+
ALib::CommaList cl( cmd.GetValue( FLAG_COLS, "" ) );
CommaListToIndex( cl, mFields );
@@ -96,11 +107,11 @@ int TrimCommand :: Execute( ALib::CommandLine & cmd ) {
CSVRow row;
while( io.ReadCSV( row ) ) {
- if ( Skip( row ) ) {
+ if ( Skip( io, row ) ) {
continue;
}
- if ( ! Pass( row ) ) {
+ if ( ! Pass( io, row ) ) {
Trim( row );
}
io.WriteRow( row );
@@ -133,6 +144,46 @@ void TrimCommand :: Chop( CSVRow & row, unsigned int i ) {
}
}
+//---------------------------------------------------------------------------
+// Remove all whitespace
+//---------------------------------------------------------------------------
+
+static string TrimAll( const string & s ) {
+ string result;
+ for ( auto c : s ) {
+ if ( ! std::isspace( c ) ) {
+ result += c;
+ }
+ }
+ return result;
+}
+
+//---------------------------------------------------------------------------
+// Reduce multiple whitespace to single space
+//---------------------------------------------------------------------------
+
+static string Trim2Single( const string & s ) {
+ string result;
+ bool havespace = false;
+ for ( auto c : s ) {
+ if ( std::isspace( c ) ) {
+ if ( havespace ){
+ continue;
+ }
+ else {
+ result += ' ';
+ havespace = true;
+ }
+ }
+ else {
+ result += c;
+ havespace = false;
+ }
+ }
+ return result;
+}
+
+
//---------------------------------------------------------------------------
// Trim fields of row. Always perform whitespace removal and only perform
// width reductions if widths specified.
@@ -152,6 +203,13 @@ void TrimCommand :: Trim( CSVRow & row ) {
}
}
+ if ( mTrimAll ) {
+ row[i] = TrimAll( row[i] );
+ }
+ else if ( mTrim2Single ) {
+ row[i] = Trim2Single( row[i] );
+ }
+
if ( mWidths.size() ) {
if ( mFields.size() == 0 || ALib::Contains( mFields, i ) ) {
Chop( row, i );
diff --git a/csvfix/src/csved_truncpad.cpp b/csvfix/src/csved_truncpad.cpp
old mode 100644
new mode 100755
index f9f6eec..2741fa4
--- a/csvfix/src/csved_truncpad.cpp
+++ b/csvfix/src/csved_truncpad.cpp
@@ -143,11 +143,11 @@ int TruncPadBase :: Execute( ALib::CommandLine & cmd ) {
while( io.ReadCSV( row ) ) {
- if ( Skip( row ) ) {
+ if ( Skip( io, row ) ) {
continue;
}
- if ( ! Pass( row ) ) {
+ if ( ! Pass( io, row ) ) {
unsigned int nc = ncolspec ? ncols : row.size() + padding.Size();
ProcessRow( row, nc, padding );
}
diff --git a/csvfix/src/csved_util.cpp b/csvfix/src/csved_util.cpp
old mode 100644
new mode 100755
index 1fcb068..402f100
--- a/csvfix/src/csved_util.cpp
+++ b/csvfix/src/csved_util.cpp
@@ -110,7 +110,7 @@ int CmpRow( const CSVRow & a, const CSVRow & b, const FieldList & f ) {
// Get field or empty string if field does not exist
//----------------------------------------------------------------------------
-std:: string GetField( const CSVRow & row, unsigned int i ) {
+std::string GetField( const CSVRow & row, unsigned int i ) {
return i >= row.size() ? "" : row[i];
}
diff --git a/csvfix/src/csved_valid.cpp b/csvfix/src/csved_valid.cpp
old mode 100644
new mode 100755
index db2629e..d3b965e
--- a/csvfix/src/csved_valid.cpp
+++ b/csvfix/src/csved_valid.cpp
@@ -89,7 +89,7 @@ int ValidateCommand :: Execute( ALib::CommandLine & cmd ) {
bool errcode = cmd.HasFlag( FLAG_ERRCODE );
while( io.ReadCSV( row ) ) {
- if ( Skip( row ) ) {
+ if ( Skip( io, row ) ) {
continue;
}
int errcount = 0;
diff --git a/csvfix/src/csved_writemulti.cpp b/csvfix/src/csved_writemulti.cpp
old mode 100644
new mode 100755
index 5286213..956e517
--- a/csvfix/src/csved_writemulti.cpp
+++ b/csvfix/src/csved_writemulti.cpp
@@ -66,7 +66,7 @@ int WriteMultiCommand :: Execute( ALib::CommandLine & cmd ) {
CSVRow row, master;
bool haveout = false;
while( io.ReadCSV( row ) ) {
- if ( Skip( row ) ) {
+ if ( Skip( io, row ) ) {
continue;
}
if ( GetNewMaster( row, master )) { // new master
@@ -175,7 +175,7 @@ void WriteMultiCommand :: ProcessFlags( const ALib::CommandLine & cmd ) {
CommaListToIndex( dl, mDetail );
mHaveRecSep = cmd.HasFlag( FLAG_RECSEP );
- mRecSep = cmd.GetValue( FLAG_RECSEP, "" );
+ mRecSep = ALib::UnEscape( cmd.GetValue( FLAG_RECSEP, "" ) );
}
diff --git a/csvfix/tests/correct/check.test b/csvfix/tests/correct/check.test
old mode 100644
new mode 100755
index e69de29..0664a02
--- a/csvfix/tests/correct/check.test
+++ b/csvfix/tests/correct/check.test
@@ -0,0 +1,2 @@
+data/names.csv - OK
+data/birthdays.csv - OK
diff --git a/csvfix/tests/correct/erase.test b/csvfix/tests/correct/erase.test
new file mode 100755
index 0000000..2d350c3
--- /dev/null
+++ b/csvfix/tests/correct/erase.test
@@ -0,0 +1,8 @@
+"2","3"
+"1","3"
+"1","2"
+"1","","3"
+"foo"
+"foo"
+"foo"
+""
diff --git a/csvfix/tests/correct/exec.test b/csvfix/tests/correct/exec.test
old mode 100644
new mode 100755
index 0713c7c..a62a979
--- a/csvfix/tests/correct/exec.test
+++ b/csvfix/tests/correct/exec.test
@@ -5,3 +5,12 @@
"George","Elliot","F","GXXrgX EllXXt"
"Virginia","Woolf","F","VXrgXnXX WXXlf"
"Oscar","Wilde","M","OscXr WXldX"
+"Charles","Dickens","M","Dickens","Charles","Bleak House","Esther Sumerson","Drippy Heroine"
+"Charles","Dickens","M","Dickens","Charles","Bleak House","Inspector Bucket","Prototype detective"
+"Charles","Dickens","M","Dickens","Charles","Great Expectations","Pip","Deluded ex-blacksmith"
+"Charles","Dickens","M","Dickens","Charles","Bleak House","Mr Vholes","Vampiric lawyer"
+"Jane","Austen","F","Austen","Jane","Emma","Emma Woodhouse","Smug Surrey goddess"
+"Jane","Austen","F","Austen","Jane","Pride & Prejudice","Elizabeth Bennet","Non-drippy heroine"
+"Jane","Austen","F","Austen","Jane","Pride & Prejudice","Mr Darcy","Proud landowner"
+"Herman","Melville","M","Melville","Herman","Moby Dick","Queeqeg","Tattooed harpooneer"
+"Herman","Melville","M","Melville","Herman","Moby Dick","Moby Dick","Great white whale"
diff --git a/csvfix/tests/correct/pivot.test b/csvfix/tests/correct/pivot.test
new file mode 100755
index 0000000..3068f05
--- /dev/null
+++ b/csvfix/tests/correct/pivot.test
@@ -0,0 +1,9 @@
+"","beans","bread","rice"
+"north","37","7","13"
+"south","31","21","10"
+"","beans","bread","rice"
+"north","3","1","2"
+"south","2","2","2"
+"","beans","bread","rice"
+"north","12.3333","7","6.5"
+"south","15.5","10.5","5"
diff --git a/csvfix/tests/correct/printf.test b/csvfix/tests/correct/printf.test
old mode 100644
new mode 100755
index d769c59..a575c4b
--- a/csvfix/tests/correct/printf.test
+++ b/csvfix/tests/correct/printf.test
@@ -15,3 +15,17 @@ Sex: M Name: Oscar Wilde
Name: Al ""Scarface"" Capone
Name: Clyde Barrow
Name: Michael ""Godfather 2"" Corleone
+Sex: M
+Name: Charles Dickens
+Sex: F
+Name: Jane Austen
+Sex: M
+Name: Herman Melville
+Sex: M
+Name: Flann O'Brien
+Sex: F
+Name: George Elliot
+Sex: F
+Name: Virginia Woolf
+Sex: M
+Name: Oscar Wilde
diff --git a/csvfix/tests/correct/rowsort.test b/csvfix/tests/correct/rowsort.test
new file mode 100755
index 0000000..cecc8e5
--- /dev/null
+++ b/csvfix/tests/correct/rowsort.test
@@ -0,0 +1,9 @@
+"1","2","3"
+"1","2","3"
+"1","2","3"
+"1","2","3"
+"1","2","3"
+"1","2","3"
+"3","2","1"
+"3","2","1"
+"3","2","1"
diff --git a/csvfix/tests/correct/splitlen.test b/csvfix/tests/correct/splitlen.test
new file mode 100755
index 0000000..04add11
--- /dev/null
+++ b/csvfix/tests/correct/splitlen.test
@@ -0,0 +1,3 @@
+"A","1234","xx"
+"A","123456","xx"
+"A","","xx"
diff --git a/csvfix/tests/correct/splitregex.test b/csvfix/tests/correct/splitregex.test
new file mode 100755
index 0000000..04add11
--- /dev/null
+++ b/csvfix/tests/correct/splitregex.test
@@ -0,0 +1,3 @@
+"A","1234","xx"
+"A","123456","xx"
+"A","","xx"
diff --git a/csvfix/tests/correct/squash.test b/csvfix/tests/correct/squash.test
new file mode 100755
index 0000000..34c475b
--- /dev/null
+++ b/csvfix/tests/correct/squash.test
@@ -0,0 +1,18 @@
+"bar","8"
+"foo","7"
+"zod","6"
+"foo","bar","4"
+"foo","xxx","5"
+"foo","zod","2"
+"goo","bar","11"
+"zoo","","6"
+"foo","bar","4.4"
+"foo","xxx","5.5"
+"foo","zod","2.2"
+"goo","bar","12.1"
+"zoo","","6.6"
+"foo","bar","4.4"
+"foo","xxx","42"
+"foo","zod","42"
+"goo","bar","12.1"
+"zoo","","6.6"
diff --git a/csvfix/tests/correct/stat.test b/csvfix/tests/correct/stat.test
old mode 100644
new mode 100755
index ed8a90e..3152109
--- a/csvfix/tests/correct/stat.test
+++ b/csvfix/tests/correct/stat.test
@@ -1 +1,14 @@
-"data/names.csv","7","3","3"
+"data/names.csv","7","3","3","8","8","1"
+"data/army.csv","1","string","4","5"
+"data/army.csv","2","string","3","4"
+"data/army.csv","3","string","5","9"
+"data/books.csv","1","string","6","8"
+"data/books.csv","2","string","4","7"
+"data/books.csv","3","string","4","18"
+"data/books.csv","4","string","3","16"
+"data/books.csv","5","string","14","21"
+"data/numbers.csv","1","number","1","1"
+"data/numbers.csv","2","number","2","4"
+"data/army.csv","name","string","4","5"
+"data/army.csv","rank","string","3","3"
+"data/army.csv","serial_no","number","5","5"
diff --git a/csvfix/tests/correct/trim.test b/csvfix/tests/correct/trim.test
old mode 100644
new mode 100755
index 38a5fbd..8d719c8
--- a/csvfix/tests/correct/trim.test
+++ b/csvfix/tests/correct/trim.test
@@ -8,3 +8,7 @@
"G","E","F"
"V","W","F"
"O","W","M"
+"thequickbrownfox"
+"thequickbrownfox"
+"the quick brown fox"
+"the quick brown fox"
diff --git a/csvfix/tests/correct/wmulti.test b/csvfix/tests/correct/wmulti.test
new file mode 100755
index 0000000..7e04d81
--- /dev/null
+++ b/csvfix/tests/correct/wmulti.test
@@ -0,0 +1,20 @@
+bob,dylan
+bringing it all back home
+blonde on blonde
+john wesley harding
+-----
+nick,drake
+bryter later
+pink moon
+-----
+bob,dylan
+bringing it all back home
+blonde on blonde
+john wesley harding
+
+
+nick,drake
+bryter later
+pink moon
+
+
diff --git a/csvfix/tests/data/8bit.csv b/csvfix/tests/data/8bit.csv
new file mode 100755
index 0000000..cab194f
--- /dev/null
+++ b/csvfix/tests/data/8bit.csv
@@ -0,0 +1,3 @@
+ø£Ø
+not
+ø£Ø
diff --git a/csvfix/tests/data/erase.csv b/csvfix/tests/data/erase.csv
new file mode 100755
index 0000000..3e873da
--- /dev/null
+++ b/csvfix/tests/data/erase.csv
@@ -0,0 +1,4 @@
+foo,2,3
+1,foo,3
+1,2,foo
+1,,3
diff --git a/csvfix/tests/data/fsplit.csv b/csvfix/tests/data/fsplit.csv
new file mode 100755
index 0000000..562ad06
--- /dev/null
+++ b/csvfix/tests/data/fsplit.csv
@@ -0,0 +1,4 @@
+1,2,"key 1,2"
+1,3,"key 1,3"
+1,2,"key 1,2"
+4,5,"key 4,5"
diff --git a/csvfix/tests/data/pivot.csv b/csvfix/tests/data/pivot.csv
new file mode 100755
index 0000000..b11726b
--- /dev/null
+++ b/csvfix/tests/data/pivot.csv
@@ -0,0 +1,12 @@
+north,beans,2014-01-01,12
+north,beans,2014-01-01,10
+north,rice,2014-01-02,5
+north,bread,2014-01-02,7
+north,beans,2014-01-03,15
+north,rice,2014-01-03,8
+south,bread,2014-01-01,13
+south,beans,2014-01-01,19
+south,rice,2014-01-02,1
+south,rice,2014-01-02,9
+south,beans,2014-01-03,12
+south,bread,2014-01-03,8
diff --git a/csvfix/tests/data/rsort.csv b/csvfix/tests/data/rsort.csv
new file mode 100755
index 0000000..2c4319e
--- /dev/null
+++ b/csvfix/tests/data/rsort.csv
@@ -0,0 +1,3 @@
+1,2,3
+3,2,1
+1,3,2
diff --git a/csvfix/tests/data/sales_region.csv b/csvfix/tests/data/sales_region.csv
new file mode 100755
index 0000000..0215d55
--- /dev/null
+++ b/csvfix/tests/data/sales_region.csv
@@ -0,0 +1,6 @@
+South,1040
+East,200
+South,78
+North,2023
+West,77
+North,770
diff --git a/csvfix/tests/data/splitlen.csv b/csvfix/tests/data/splitlen.csv
new file mode 100755
index 0000000..74c5ee3
--- /dev/null
+++ b/csvfix/tests/data/splitlen.csv
@@ -0,0 +1,3 @@
+A1234xx
+A123456xx
+Axx
diff --git a/csvfix/tests/data/squash1.csv b/csvfix/tests/data/squash1.csv
new file mode 100755
index 0000000..5e2bbc7
--- /dev/null
+++ b/csvfix/tests/data/squash1.csv
@@ -0,0 +1,6 @@
+foo,1
+foo,2
+bar,3
+foo,4
+bar,5
+zod,6
diff --git a/csvfix/tests/data/squash2.csv b/csvfix/tests/data/squash2.csv
new file mode 100755
index 0000000..4b5c69c
--- /dev/null
+++ b/csvfix/tests/data/squash2.csv
@@ -0,0 +1,7 @@
+foo,bar,1
+foo,zod,2
+foo,bar,3
+goo,bar,4
+foo,xxx,5
+zoo,,6
+goo,bar,7
diff --git a/csvfix/tests/data/squash3.csv b/csvfix/tests/data/squash3.csv
new file mode 100755
index 0000000..26eda7a
--- /dev/null
+++ b/csvfix/tests/data/squash3.csv
@@ -0,0 +1,7 @@
+foo,bar,1.1
+foo,zod,2.2
+foo,bar,3.3
+goo,bar,4.4
+foo,xxx,5.5
+zoo,,6.6
+goo,bar,7.7
diff --git a/csvfix/tests/data/squash4.csv b/csvfix/tests/data/squash4.csv
new file mode 100755
index 0000000..28cb711
--- /dev/null
+++ b/csvfix/tests/data/squash4.csv
@@ -0,0 +1,7 @@
+foo,bar,1.1
+foo,zod,
+foo,bar,3.3
+goo,bar,4.4
+foo,xxx,
+zoo,,6.6
+goo,bar,7.7
diff --git a/csvfix/tests/data/trim2.csv b/csvfix/tests/data/trim2.csv
new file mode 100755
index 0000000..1a90dde
--- /dev/null
+++ b/csvfix/tests/data/trim2.csv
@@ -0,0 +1,2 @@
+the quick brown fox
+the quick brown fox
diff --git a/csvfix/tests/data/wmulti.csv b/csvfix/tests/data/wmulti.csv
new file mode 100755
index 0000000..07ec091
--- /dev/null
+++ b/csvfix/tests/data/wmulti.csv
@@ -0,0 +1,5 @@
+bob,dylan,bringing it all back home
+bob,dylan,blonde on blonde
+bob,dylan,john wesley harding
+nick,drake,bryter later
+nick,drake,pink moon
diff --git a/csvfix/tests/tests/check.test b/csvfix/tests/tests/check.test
old mode 100644
new mode 100755
index b62b8fc..4ef3bf7
--- a/csvfix/tests/tests/check.test
+++ b/csvfix/tests/tests/check.test
@@ -1 +1,2 @@
-$CSVED check data/names.csv
+$CSVED check -v data/names.csv
+$CSVED check -v data/birthdays.csv
diff --git a/csvfix/tests/tests/erase.test b/csvfix/tests/tests/erase.test
new file mode 100755
index 0000000..d2c460f
--- /dev/null
+++ b/csvfix/tests/tests/erase.test
@@ -0,0 +1,2 @@
+$CSVED erase -r 'foo' data/erase.csv
+$CSVED erase -r '[0-9]' data/erase.csv
diff --git a/csvfix/tests/tests/exec.test b/csvfix/tests/tests/exec.test
old mode 100644
new mode 100755
index bde1381..ea49416
--- a/csvfix/tests/tests/exec.test
+++ b/csvfix/tests/tests/exec.test
@@ -1 +1,3 @@
$CSVED exec -c 'echo %1 %2|tr aeiou X' data/names.csv
+$CSVED exec -ix 1 -c 'grep %1 data/books.csv' data/names.csv
+
diff --git a/csvfix/tests/tests/pivot.test b/csvfix/tests/tests/pivot.test
new file mode 100755
index 0000000..1573a6c
--- /dev/null
+++ b/csvfix/tests/tests/pivot.test
@@ -0,0 +1,3 @@
+$CSVED pivot -c 2 -r 1 -f 4 -a sum data/pivot.csv
+$CSVED pivot -c 2 -r 1 -f 4 -a count data/pivot.csv
+$CSVED pivot -c 2 -r 1 -f 4 -a avg data/pivot.csv
diff --git a/csvfix/tests/tests/printf.test b/csvfix/tests/tests/printf.test
old mode 100644
new mode 100755
index 13313aa..610bc53
--- a/csvfix/tests/tests/printf.test
+++ b/csvfix/tests/tests/printf.test
@@ -1,5 +1,5 @@
$CSVED printf -fmt 'Name: %10.10s %@ Sex: %s' data/names.csv
$CSVED printf -f 3,1,2 -fmt 'Sex: %s Name: %s %s' data/names.csv
$CSVED printf -q -fmt 'Name: %s' data/gangsters.csv
-
+$CSVED printf -f 3,1,2 -fmt 'Sex: %s\nName: %s %s' data/names.csv
diff --git a/csvfix/tests/tests/rowsort.test b/csvfix/tests/tests/rowsort.test
new file mode 100755
index 0000000..1ed4b1c
--- /dev/null
+++ b/csvfix/tests/tests/rowsort.test
@@ -0,0 +1,4 @@
+$CSVED rowsort data/rsort.csv
+$CSVED rowsort -n data/rsort.csv
+$CSVED rowsort -n -d data/rsort.csv
+
diff --git a/csvfix/tests/tests/splitlen.test b/csvfix/tests/tests/splitlen.test
new file mode 100755
index 0000000..8855225
--- /dev/null
+++ b/csvfix/tests/tests/splitlen.test
@@ -0,0 +1 @@
+$CSVED split_fixed -f 1 -l 1,*,2 data/splitlen.csv
diff --git a/csvfix/tests/tests/splitregex.test b/csvfix/tests/tests/splitregex.test
new file mode 100755
index 0000000..6263b40
--- /dev/null
+++ b/csvfix/tests/tests/splitregex.test
@@ -0,0 +1 @@
+$CSVED split_regex -f 1 -r '\(.\)\([0-9]*\)\(.*\)' data/splitlen.csv
diff --git a/csvfix/tests/tests/squash.test b/csvfix/tests/tests/squash.test
new file mode 100755
index 0000000..8f07b10
--- /dev/null
+++ b/csvfix/tests/tests/squash.test
@@ -0,0 +1,4 @@
+$CSVED squash -f 1 -n 2 data/squash1.csv
+$CSVED squash -f 1,2 -n 3 data/squash2.csv
+$CSVED squash -f 1,2 -n 3 -rn data/squash3.csv
+$CSVED squash -f 1,2 -n 3 -rn -nn 42.0 data/squash4.csv
diff --git a/csvfix/tests/tests/stat.test b/csvfix/tests/tests/stat.test
old mode 100644
new mode 100755
index 6b7114c..8a11a57
--- a/csvfix/tests/tests/stat.test
+++ b/csvfix/tests/tests/stat.test
@@ -1 +1,3 @@
$CSVED stat data/names.csv
+$CSVED stat -fs data/army.csv data/books.csv data/numbers.csv
+$CSVED stat -fs -fn data/army.csv
diff --git a/csvfix/tests/tests/trim.test b/csvfix/tests/tests/trim.test
old mode 100644
new mode 100755
index 261f262..eaafb5c
--- a/csvfix/tests/tests/trim.test
+++ b/csvfix/tests/tests/trim.test
@@ -1,2 +1,4 @@
$CSVED trim data/spaces.csv
$CSVED trim -w 1,1,1 data/names.csv
+$CSVED trim -a data/trim2.csv
+$CSVED trim -s data/trim2.csv
diff --git a/csvfix/tests/tests/wmulti.test b/csvfix/tests/tests/wmulti.test
new file mode 100755
index 0000000..5d03158
--- /dev/null
+++ b/csvfix/tests/tests/wmulti.test
@@ -0,0 +1,4 @@
+$CSVED write_multi -m 1,2 -rs '-----' -smq data/wmulti.csv
+$CSVED write_multi -m 1,2 -rs '\n' -smq data/wmulti.csv
+
+
diff --git a/docs/citiescsv.html b/docs/citiescsv.html
index 266ca81..6652882 100644
--- a/docs/citiescsv.html
+++ b/docs/citiescsv.html
@@ -28,7 +28,7 @@
-
+
@@ -74,7 +74,7 @@
Toggle navigation
- CSVfix 1.6 Manual
+ CSVfix 1.7 Manual
diff --git a/docs/index.html b/docs/index.html
index 6020c73..47b772f 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -777,6 +777,12 @@
Created with the Personal Edition of HelpNDoc: Write eBooks for the Kindle
Change Log
+Changes from Version 1.6 to 1.7
+
+
+ - Code imported without history from some forgotten Mercurial repository.
+
+
Changes from Version 1.5 to 1.6
diff --git a/docs/src/csvfix-manual.hnd b/docs/src/csvfix-manual.hnd
index e960a81..8e91ccc 100644
Binary files a/docs/src/csvfix-manual.hnd and b/docs/src/csvfix-manual.hnd differ
diff --git a/readme.md b/readme.md
old mode 100644
new mode 100755
index f0a01df..4f9f869
--- a/readme.md
+++ b/readme.md
@@ -10,7 +10,7 @@ For further information, please see the CSVfix website
at http://neilb.bitbucket.org/csvfix/
Neil Butterworth
-13-Apr-2014
+13-Nov-2014
-----
@@ -25,10 +25,12 @@ the code from the Google Code repo, but none of them compiles correctly on Linux
the mentioned [1.6 on Sourceforce](https://sourceforge.net/projects/csvfix/) that was brought
there by [Pedro Albanese](https://sourceforge.net/u/pedroalbanese/profile/). That one works!
+UPDATE : A zip of version 1.7 was discovered on a backup drive by [@the-reverend](https://github.com/the-reverend) and it also builds!
+
I tried to install CSVfix using Homebrew on the Mac but that fails as well, as it tries to use the dead Bitbucket repo.
So the idea of this repository here is:
- * provide a working copy of 1.6 on Github (done, more or less a copy of Pedros repo)
+ * provide a working copy of 1.7 on Github (done, more or less a copy of [@the-reverend](https://github.com/the-reverend)'s backup)
* provide a release using Github Actions (done)
* point Homebrew to the new location (-not accepted by Homebrew-)