Part Bug fix for 729476, this changes the line endings to \r\n to make it more compatible with CSV format.

This commit is contained in:
Robert Fewell 2014-09-19 14:06:59 +01:00 committed by Geert Janssens
parent 2b6a6d896c
commit ba1f8cb1c6
3 changed files with 43 additions and 8 deletions

View File

@ -256,7 +256,11 @@ void account_splits (CsvExportInfo *info, Account *acc, FILE *fh )
g_free (part1); g_free (part1);
/* From Number Only */ /* From Number Only */
#ifdef G_OS_WIN32
part1 = g_strconcat (part2, "", mid_sep, "", mid_sep, "", end_sep, "\n", NULL); part1 = g_strconcat (part2, "", mid_sep, "", mid_sep, "", end_sep, "\n", NULL);
#else
part1 = g_strconcat (part2, "", mid_sep, "", mid_sep, "", end_sep, "\r\n", NULL);
#endif
g_free (part2); g_free (part2);
/* Write to file */ /* Write to file */
@ -346,9 +350,17 @@ void account_splits (CsvExportInfo *info, Account *acc, FILE *fh )
split_amount = xaccPrintAmount (xaccSplitGetSharePrice (t_split), gnc_split_amount_print_info (t_split, FALSE)); split_amount = xaccPrintAmount (xaccSplitGetSharePrice (t_split), gnc_split_amount_print_info (t_split, FALSE));
str_temp = csv_txn_test_field_string (info, split_amount); str_temp = csv_txn_test_field_string (info, split_amount);
if (xaccSplitGetAccount (t_split) == acc) if (xaccSplitGetAccount (t_split) == acc)
#ifdef G_OS_WIN32
part2 = g_strconcat (part1, str_temp, mid_sep, end_sep, "\n", NULL); part2 = g_strconcat (part1, str_temp, mid_sep, end_sep, "\n", NULL);
else #else
part2 = g_strconcat (part1, str_temp, mid_sep, end_sep, "\r\n", NULL);
#endif
else
#ifdef G_OS_WIN32
part2 = g_strconcat (part1, mid_sep, str_temp, end_sep, "\n", NULL); part2 = g_strconcat (part1, mid_sep, str_temp, end_sep, "\n", NULL);
#else
part2 = g_strconcat (part1, mid_sep, str_temp, end_sep, "\r\n", NULL);
#endif
g_free (str_temp); g_free (str_temp);
g_free (part1); g_free (part1);
@ -415,7 +427,11 @@ void csv_transactions_export (CsvExportInfo *info)
_("To With Sym"), mid_sep, _("From With Sym"), mid_sep, _("To With Sym"), mid_sep, _("From With Sym"), mid_sep,
_("To Num."), mid_sep, _("From Num."), mid_sep, _("To Num."), mid_sep, _("From Num."), mid_sep,
_("To Rate/Price"), mid_sep, _("From Rate/Price"), _("To Rate/Price"), mid_sep, _("From Rate/Price"),
#ifdef G_OS_WIN32
end_sep, "\n", NULL); end_sep, "\n", NULL);
#else
end_sep, "\r\n", NULL);
#endif
DEBUG("Header String: %s", header); DEBUG("Header String: %s", header);
/* Write header line */ /* Write header line */

View File

@ -144,12 +144,19 @@ void csv_tree_export (CsvExportInfo *info)
} }
/* Header string, 'eol = end of line marker' */ /* Header string, 'eol = end of line marker' */
header = g_strconcat ( end_sep, _("type"), mid_sep, _("full_name"), mid_sep, #ifdef G_OS_WIN32
_("name"), mid_sep, _("code"), mid_sep, header = g_strconcat (end_sep, _("type"), mid_sep, _("full_name"), mid_sep, _("name"), mid_sep,
_("description"), mid_sep, _("color"), mid_sep, _("notes"), mid_sep, _("code"), mid_sep, _("description"), mid_sep, _("color"), mid_sep,
_("commoditym"), mid_sep, _("commodityn"), mid_sep, _("notes"), mid_sep, _("commoditym"), mid_sep, _("commodityn"), mid_sep,
_("hidden"), mid_sep, _("tax"), mid_sep, _("place_holder"), mid_sep, _("hidden"), mid_sep, _("tax"), mid_sep, _("place_holder"), mid_sep, _("#eol"),
_("#eol"), end_sep, "\n", NULL); end_sep, "\n", NULL);
#else
header = g_strconcat (end_sep, _("type"), mid_sep, _("full_name"), mid_sep, _("name"), mid_sep,
_("code"), mid_sep, _("description"), mid_sep, _("color"), mid_sep,
_("notes"), mid_sep, _("commoditym"), mid_sep, _("commodityn"), mid_sep,
_("hidden"), mid_sep, _("tax"), mid_sep, _("place_holder"), mid_sep, _("#eol"),
end_sep, "\r\n", NULL);
#endif
DEBUG("Header String: %s", header); DEBUG("Header String: %s", header);
/* Write header line */ /* Write header line */
@ -229,7 +236,11 @@ void csv_tree_export (CsvExportInfo *info)
g_free (part2); g_free (part2);
/* Place Holder / end of line marker */ /* Place Holder / end of line marker */
currentSel = xaccAccountGetPlaceholder (acc) ? "T" : "F" ; currentSel = xaccAccountGetPlaceholder (acc) ? "T" : "F" ;
#ifdef G_OS_WIN32
part2 = g_strconcat (part1, currentSel, mid_sep, _("#eol"), end_sep, "\n", NULL); part2 = g_strconcat (part1, currentSel, mid_sep, _("#eol"), end_sep, "\n", NULL);
#else
part2 = g_strconcat (part1, currentSel, mid_sep, _("#eol"), end_sep, "\r\n", NULL);
#endif
g_free (part1); g_free (part1);
DEBUG("Account String: %s", part2); DEBUG("Account String: %s", part2);

View File

@ -119,8 +119,13 @@ csv_import_read_file (const gchar *filename, const gchar *parser_regexp,
} }
/* Setup the two different line endings */ /* Setup the two different line endings */
#ifdef G_OS_WIN32
end1 = g_strconcat (_("#eol"),"\"\n", NULL); end1 = g_strconcat (_("#eol"),"\"\n", NULL);
end2 = g_strconcat (_("#eol"),"\n", NULL); end2 = g_strconcat (_("#eol"),"\n", NULL);
#else
end1 = g_strconcat (_("#eol"),"\"\r\n", NULL);
end2 = g_strconcat (_("#eol"),"\r\n", NULL);
#endif
// start the import // start the import
#define buffer_size 1000 #define buffer_size 1000
@ -154,11 +159,14 @@ csv_import_read_file (const gchar *filename, const gchar *parser_regexp,
break; // eof break; // eof
} }
// now strip the '\n' from the end of the line // now strip the '\r\n' from the end of the line
l = strlen (currentline); l = strlen (currentline);
if ((l > 0) && (currentline[l - 1] == '\n')) if ((l > 0) && (currentline[l - 1] == '\n'))
currentline[l - 1] = 0; currentline[l - 1] = 0;
if ((l > 0) && (currentline[l - 2] == '\r'))
currentline[l - 2] = 0;
// convert line from locale into utf8 // convert line from locale into utf8
line_utf8 = g_locale_to_utf8 (currentline, -1, NULL, NULL, NULL); line_utf8 = g_locale_to_utf8 (currentline, -1, NULL, NULL, NULL);