as the file is of type
CSV
and there is a
available your idea might be good,
still as
only know column types
|type|int: the type to be used for the new column: INT, LONG, FLOAT, DOUBLE, or STRING
and not DATE
it might not matter too much if you use table or string
the whole line as string ( array of )
and use
on “,/” might give you 5 columns
OR
now the main question is what DATE functions on string are available?
i not find anything snappy so i play:
import java.text.SimpleDateFormat;
import java.util.*;
// string to date format
String indate = "07/11/1997"; // month/day/year thinking
Date makedate = new Date();
Date conv_datestring(String indate) {
Date pdate = new Date();
try {
pdate = new SimpleDateFormat("MM/dd/yyyy").parse(indate);
}
catch (Exception e) {
}
print(indate+" : ");
println(new SimpleDateFormat("yyyy:MM:dd HH:mm:ss").format(pdate));
return pdate;
}
void setup() {
size(200,200);
makedate = conv_datestring(indate);
}
can also convert to EPOCH millis ( store as LONG, sort, calc… and back)
long oneday = 1000*24*60*60,onehour = 1000*60*60,datemillis;
void setup() {
size(200, 200);
// You can simply parse it to java.util.Date using java.text.SimpleDateFormat
// and call it's getTime() function.
// It will return the number of milliseconds since Jan 01 1970.
makedate = conv_datestring(indate);
println("date: "+makedate);
datemillis = makedate.getTime(); // can save and sort as LONG
//println("as Long EPOCH millis "+datemillis);
datemillis+=oneday+onehour; // calc next day +1 hour
makedate = new Date(datemillis); // convert back
println("date++: "+makedate);
}
example
// https://discourse.processing.org/t/sorting-an-array-of-dates-as-strings/7487
// not same like
// https://discourse.processing.org/t/processing-3-0-how-to-sort-string-array-by-value-of-substrings/6436
/*
Carrie,Williamson,29/06/2028
Alejandro,Bell,07/11/1997
Christina,Wise,27/01/1988
Charlotte,Stephens,14/08/1977
May,Andrews,27/05/1955
Elnora,Porter,03/12/1933
Cory,Morris,19/01/1966
Travis,Thompson,12/05/2070
Lizzie,Holland,10/01/2062
Charlotte,Jensen,09/06/1915
Dennis,Coleman,12/10/2054
Chris,Osborne,03/09/1908
*/
// in data/mylist.csv
// get the java date tools
import java.text.SimpleDateFormat;
import java.util.*;
String indate = "28/11/1997"; // day/month/year thinking
String informat = "dd/MM/yyyy";
String outformat= "yyyy:MM:dd HH:mm:ss";
Date makedate = new Date();
String infilename = "data/mylist.csv";
String outfilename = "data/mylist_sort.csv";
Table mytable;
TableRow row;
int tcols, trows;
boolean dprint = true;
void getfile_tabledata() { // get tabledata from file
mytable = loadTable(infilename);//, "header, csv");
print_table();
}
void make_new_sortcolumn() {
// idea is that the date are string type date and need to make a new column what convert that date to a standard numeric form what can be sorted.
mytable.addColumn();
tcols = mytable.getColumnCount();
trows = mytable.getRowCount();
if (dprint) println("new: total cols in table: "+tcols);
mytable.setColumnType(tcols-1, Table.LONG); // for millis sinze 1970 need LONG
for ( int i = 0; i < trows; i++ ) {
TableRow thisrow = mytable.getRow(i);
String datestring = thisrow.getString(2);
thisrow.setLong(3,conv_datestring_to_millis(datestring,dprint));
}
}
long conv_datestring_to_millis(String indate, boolean diag) {
Date pdate = new Date();
try {
pdate = new SimpleDateFormat(informat).parse(indate);
}
catch (Exception e) {
}
if (diag) println(indate+" : "+new SimpleDateFormat(outformat).format(pdate));
return pdate.getTime();
}
void sort_tabledata(int numcol) { // sort numerically a specific column
//mytable.setColumnType(numcol, Table.INT);
mytable.sort(numcol);
if (dprint) println("list all rows column "+numcol+" sorted ");
print_table();
}
void remove_new_sortcolumn(int delcol) {
mytable.removeColumn(delcol);
}
void print_table() {
tcols = mytable.getColumnCount();
if (dprint) println("total cols in table: "+tcols);
trows = mytable.getRowCount();
if (dprint) println("total rows in table: "+trows);
for ( int i = 0; i < trows; i++ ) {
TableRow thisrow = mytable.getRow(i);
if (dprint) print("["+i+"] ");
for ( int j = 0; j < tcols; j++ ) {
if (dprint) print(thisrow.getString(j)+", ");
}
if (dprint) println();
}
}
void save_tabledata() { // save to other file
saveTable(mytable, outfilename);//, "csv");
}
void setup() {
getfile_tabledata();
make_new_sortcolumn(); // column 2 date to column 3 millis
sort_tabledata(3); // column sort 0,1,2
remove_new_sortcolumn(3);
save_tabledata();
exit();
}