/*
* [CSVToSRX.java]
*
* Summary: Converts a 2-column CSV file to a Funduc Search Replace BE SRX Script.
*
* Copyright: (c) 2014-2017 Roedy Green, Canadian Mind Products, http://mindprod.com
*
* Licence: This software may be copied and used freely for any purpose but military.
* http://mindprod.com/contact/nonmil.html
*
* Requires: JDK 1.8+
*
* Created with: JetBrains IntelliJ IDEA IDE http://www.jetbrains.com/idea/
*
* Version History:
* 1.0 2014-08-05 initial version, cloned from CSVToSRS
*/
package com.mindprod.csv;
import com.mindprod.common18.EIO;
import com.mindprod.common18.ST;
import com.mindprod.entities.EntifyStrings;
import com.mindprod.fastcat.FastCat;
import java.io.EOFException;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.Charset;
import static java.lang.System.*;
/**
* Converts a 2-column CSV file to a Funduc Search Replace BE SRX Script.
*
* Use: java.exe com.mindprod.CSVToSRX pairs.csv
*
* @author Roedy Green, Canadian Mind Products
* @version 1.0 2014-08-05 initial version, cloned from CSVToSRS
* @since 2014-08-05
*/
public final class CSVToSRX
{
// heading for file. No need for BOM. Generated File must be \n not \r\n.
private static final String PRELUDE = "\n" +
"\n" +
"\n";
// tail end of file.
private static final String POSTLUDE = "\n" +
"*.html\n" +
"C:\\temp\\\n" +
"\n" +
"\n";
/**
* how to use the command line
*/
private static final String USAGE = "\nCSVToSRX needs a single *.csv file on the command line. Output will be in " +
"*.srx.";
/**
* Constructor to prepare a Funduc BE SRX search/replace script from a CSV file.
*
* @param fileBeingProcessed CSV file to be packed to remove excess space and quotes.
* @param separatorChar field separator character, usually ',' in North America,
* ';' in Europe and sometimes '\t' for
* tab for the output file. It is tab for the input file.
* Note this is a 'char' not a "string".
* @param quoteChar character used to quote fields containing awkward chars.
* @param commentChars chars to treat at comment lead-ins.
* @param encoding encoding of input and output.
*
* @throws java.io.IOException if problems reading/writing file
*/
@SuppressWarnings( { "WeakerAccess" } )
public CSVToSRX( final File fileBeingProcessed, final char separatorChar, final char quoteChar, final String commentChars,
final Charset encoding ) throws IOException
{
// reader, separatorChar, quoteChar, commentChars, hideComments, trimQuoted, trimUnquoted,
// allowMultipleLineFields
final CSVReader r = new CSVReader( EIO.getBufferedReader( fileBeingProcessed, 64 * 1024, encoding ),
separatorChar, quoteChar, commentChars,
true, true /* trimQuoted */, true /* trimUnquoted */, true );
String srsFilename = EIO.getCanOrAbsPath( fileBeingProcessed );
// replace .csv with .srs
srsFilename = ST.chopTrailingString( srsFilename, ".csv" ) + ".srx";
final File srsFile = new File( srsFilename );
final PrintWriter w = EIO.getPrintWriter( srsFile, 16 * 1024, CSV.UTF8 ); // no matter what the input encoding, always export UTF-8
w.print( PRELUDE );
try
{
while ( true )
{
final String from = r.get();
final String to = r.get();
r.skipToNextLine();
FastCat sb = new FastCat( 8 );
sb.append( "\n" );
// must be on single line to avoid appending chars to search/replace strings.
sb.append( "", EntifyStrings.entifyXML( from ), "\n" );
sb.append( "", EntifyStrings.entifyXML( to ), "\n" );
sb.append( "\n" );
w.print( sb.toString() );
}
}
catch ( EOFException e )
{
w.print( POSTLUDE );
out.println( r.lineCount() + " lines converted to an SRX script." );
r.close();
w.close();
}
}
/**
* Simple command line interface to CSVToSRS. Prepares one csv file whose name is on the command line to the guts of
* a Funduc Search/Replace script.. Must have
* extension .csv
Use java com.mindprod.CSVToSRS somefile.csv. You can use CSVToSRS constructor
* in your own programs.
*
* @param args name of csv file to remove excess quotes and space
*/
public static void main( String[] args )
{
if ( args.length != 1 )
{
throw new IllegalArgumentException( USAGE );
}
final String filename = args[ 0 ];
if ( !filename.endsWith( ".csv" ) )
{
throw new IllegalArgumentException(
"Bad Extension\n" + USAGE );
}
final File file = new File( filename );
try
{
// file, separatorChar, quoteChar, commentChar
new CSVToSRX( file, ',', '\"', "#", CSV.UTF8 );
}
catch ( IOException e )
{
err.println();
e.printStackTrace( err );
err.println( "CSVToSRX failed to convert " + EIO.getCanOrAbsPath( file ) );
err.println();
}
} // end main
}