[PATCH 4/6] CSV import: support for user specified date format

Miika Turkia miika.turkia at gmail.com
Mon May 2 10:11:35 PDT 2016


Signed-off-by: Miika Turkia <miika.turkia at gmail.com>
---
 desktop-widgets/divelogimportdialog.cpp |  6 +++--
 xslt/csv2xml.xslt                       | 41 +++++++++++++++++++++++++++++----
 2 files changed, 41 insertions(+), 6 deletions(-)

diff --git a/desktop-widgets/divelogimportdialog.cpp b/desktop-widgets/divelogimportdialog.cpp
index a1ecf15..854a522 100644
--- a/desktop-widgets/divelogimportdialog.cpp
+++ b/desktop-widgets/divelogimportdialog.cpp
@@ -720,6 +720,8 @@ int DiveLogImportDialog::setup_csv_params(QStringList r, char **params, int pnr)
 {
 	params[pnr++] = strdup("dateField");
 	params[pnr++] = intdup(r.indexOf(tr("Date")));
+	params[pnr++] = strdup("datefmt");
+	params[pnr++] = intdup(ui->DateFormat->currentIndex());
 	params[pnr++] = strdup("timeField");
 	params[pnr++] = intdup(r.indexOf(tr("Sample time")));
 	params[pnr++] = strdup("depthField");
@@ -821,7 +823,7 @@ void DiveLogImportDialog::on_buttonBox_accepted()
 					sample->tts.seconds *= 60;
 				}
 			} else {
-				char *params[41];
+				char *params[43];
 				int pnr = 0;
 
 				pnr = setup_csv_params(r, params, pnr);
@@ -888,7 +890,7 @@ void DiveLogImportDialog::on_buttonBox_accepted()
 
 				parse_manual_file(fileNames[i].toUtf8().data(), params, pnr - 1);
 			} else {
-				char *params[41];
+				char *params[43];
 				int pnr = 0;
 
 				pnr = setup_csv_params(r, params, pnr);
diff --git a/xslt/csv2xml.xslt b/xslt/csv2xml.xslt
index 3a316a2..b146616 100644
--- a/xslt/csv2xml.xslt
+++ b/xslt/csv2xml.xslt
@@ -3,6 +3,7 @@
   <xsl:include href="commonTemplates.xsl"/>
   <xsl:strip-space elements="*"/>
   <xsl:param name="dateField" select="dateField"/>
+  <xsl:param name="datefmt" select="datefmt"/>
   <xsl:param name="timeField" select="timeField"/>
   <xsl:param name="depthField" select="depthField"/>
   <xsl:param name="tempField" select="tempField"/>
@@ -42,10 +43,42 @@
           <xsl:attribute name="date">
             <xsl:choose>
               <xsl:when test="$dateField >= 0">
-                <xsl:call-template name="getFieldByIndex">
-                  <xsl:with-param name="index" select="$dateField"/>
-                  <xsl:with-param name="line" select="substring-after(substring-after(., $lf), $lf)"/>
-                </xsl:call-template>
+                <xsl:variable name="indate">
+                  <xsl:call-template name="getFieldByIndex">
+                    <xsl:with-param name="index" select="$dateField"/>
+                    <xsl:with-param name="line" select="substring-after(substring-after(., $lf), $lf)"/>
+                  </xsl:call-template>
+                </xsl:variable>
+                <xsl:variable name="separator">
+                  <xsl:choose>
+                    <xsl:when test="substring-before($indate, '.') != ''">
+                      <xsl:value-of select="'.'"/>
+                    </xsl:when>
+                    <xsl:when test="substring-before($indate, '-') != ''">
+                      <xsl:value-of select="'-'"/>
+                    </xsl:when>
+                    <xsl:when test="substring-before($indate, '/') != ''">
+                      <xsl:value-of select="'/'"/>
+                    </xsl:when>
+                  </xsl:choose>
+                </xsl:variable>
+                <xsl:choose>
+                  <!-- dd.mm.yyyy -->
+                  <xsl:when test="$datefmt = 0">
+                    <xsl:value-of select="translate(concat(substring-after(substring-after($indate, $separator), $separator), '-', substring-before(substring-after($indate, $separator), $separator), '-', substring-before($indate, $separator)), ' ', '')"/>
+                  </xsl:when>
+                  <!-- mm.yy.yyyy -->
+                  <xsl:when test="$datefmt = 1">
+                    <xsl:value-of select="translate(concat(substring-after(substring-after($indate, $separator), $separator), '-', substring-before($indate, $separator), '-', substring-before(substring-after($indate, $separator), $separator)), ' ', '')"/>
+                  </xsl:when>
+                  <!-- yyyy.mm.dd -->
+                  <xsl:when test="$datefmt = 2">
+                    <xsl:value-of select="translate(concat(substring-before($indate, $separator), '-', substring-before(substring-after($indate, $separator), $separator), '-', substring-after(substring-after($indate, $separator), $separator)), ' ', '')"/>
+                  </xsl:when>
+                  <xsl:otherwise>
+                    <xsl:value-of select="'1900-1-1'"/>
+                  </xsl:otherwise>
+                </xsl:choose>
               </xsl:when>
               <xsl:otherwise>
                 <xsl:value-of select="concat(substring($date, 1, 4), '-', substring($date, 5, 2), '-', substring($date, 7, 2))"/>
-- 
2.5.0



More information about the subsurface mailing list