]> Creatis software - CreaPhase.git/blobdiff - octave_packages/miscellaneous-1.1.0/csv2latex.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / miscellaneous-1.1.0 / csv2latex.m
diff --git a/octave_packages/miscellaneous-1.1.0/csv2latex.m b/octave_packages/miscellaneous-1.1.0/csv2latex.m
new file mode 100644 (file)
index 0000000..269e144
--- /dev/null
@@ -0,0 +1,161 @@
+## Copyright (C) 2006 Hansgeorg Schwibbe
+##
+## This program is free software; you can redistribute it and/or modify it under
+## the terms of the GNU General Public License as published by the Free Software
+## Foundation; either version 3 of the License, or (at your option) any later
+## version.
+##
+## This program is distributed in the hope that it will be useful, but WITHOUT
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+## details.
+##
+## You should have received a copy of the GNU General Public License along with
+## this program; if not, see <http://www.gnu.org/licenses/>.
+
+## Creates a latex file from a csv file. The generated latex file contains a 
+## tabular with all values of the csv file. The tabular can be decorated with 
+## row and column titles. The generated latex file can be inserted in any latex
+## document by using the '\input{latex file name without .tex}' statement.
+##
+## Usage: 
+##  - csv2latex(csv_file, csv_sep, latex_file)
+##  - csv2latex(csv_file, csv_sep, latex_file, tabular_alignments)
+##  - csv2latex(csv_file, csv_sep, latex_file, tabular_alignments, has_hline)
+##  - csv2latex(csv_file, csv_sep, latex_file,   
+##              tabular_alignments, has_hline, column_titles)
+##  - csv2latex(csv_file, csv_sep, latex_file, tabular_alignments,
+##              has_hline, column_titles, row_titles)
+##
+## Parameters:
+##  csv_file - the path to an existing csv file
+##  csv_sep - the seperator of the csv values
+##  latex_file - the path of the latex file to create     
+##  tabular_alignments - the tabular alignment preamble (default = {'l','l',...})
+##  has_hline - indicates horizontal line seperator (default = false)
+##  column_titles - array with the column titles of the tabular (default = {})
+##  row_titles - array with the row titles of the tabular (default = {})
+##
+## Examples:
+##  # creates the latex file 'example.tex' from the csv file 'example.csv' 
+##  csv2latex("example.csv", '\t', "example.tex");
+##
+##  # creates the latex file with horizontal and vertical lines
+##  csv2latex('example.csv', '\t', 'example.tex', {'|l|', 'l|'}, true);
+## 
+##  # creates the latex file with row and column titles
+##  csv2latex('example.csv', '\t', 'example.tex', {'|l|', 'l|'}, true, 
+##            {'Column 1', 'Column 2', 'Column 3'}, {'Row 1', 'Row 2'});
+
+function csv2latex (csv_file, csv_sep, latex_file, tabular_alignments, has_hline, column_titles, row_titles)
+
+  ## set up the default values
+  if nargin < 7
+   row_titles = {};
+  end
+  if nargin < 6
+   column_titles = {};
+  end
+  if nargin < 5
+   has_hline = false;
+  end
+  if nargin < 4
+   tabular_alignments = {};
+  end
+
+  ## load the csv file and create the csv cell
+  [fid, msg] = fopen (csv_file, 'r'); # open the csv file to read
+  csv = cell();
+  if fid != -1
+    [val, count] = fread(fid); # read all data from the file
+    fclose(fid); # close the csv file after reading
+    csv_value = '';
+    line_index = 1;
+    value_index = 1;
+    for index = 1:count
+      if val(index) == csv_sep
+        csv(line_index, value_index) = csv_value;
+        value_index++;
+        csv_value = '';
+      elseif (val(index) == '\n' || (val(index) == '\r' && val(index+1) == '\r'))
+        csv(line_index, value_index) = csv_value;
+        value_index++;
+        csv_value = '';
+        value_index = 1;
+        line_index++;
+      else
+        csv_value = sprintf('%s%c', csv_value, val(index));
+      end
+    end
+  end
+
+  ## get the size and length values
+  [row_size, col_size] = size(csv);
+  alignment_size = length(tabular_alignments);
+  column_title_size = length(column_titles);
+  row_title_size = length(row_titles);
+
+  ## create the alignment preamble and the column titles
+  alignment_preamble = '';
+  tabular_headline = '';
+  if row_title_size != 0
+    current_size = col_size + 1;
+  else
+    current_size = col_size;
+  end
+  for col_index = 1:current_size
+   if col_index <=  alignment_size
+     alignment_preamble = sprintf ('%s%s', alignment_preamble, tabular_alignments(col_index));
+   else
+     alignment_preamble = sprintf ('%sl', alignment_preamble);
+   end
+   if column_title_size != 0
+     if col_index <= column_title_size
+       if col_index == 1
+         tabular_headline = sprintf ('%s', column_titles(col_index));
+       else
+         tabular_headline = sprintf ('%s & %s', tabular_headline, column_titles(col_index));
+       end
+     else
+       tabular_headline = sprintf ('%s &', tabular_headline);       
+     end
+   end
+  end
+
+  ## print latex file
+  [fid, msg] = fopen (latex_file, 'w'); # open the latex file for writing
+  if fid != -1
+    fprintf (fid, '\\begin{tabular}{%s}\n', alignment_preamble); # print the begin of the tabular
+    if column_title_size != 0
+      if has_hline == true
+        fprintf (fid, '  \\hline\n');
+      end
+      fprintf (fid, '  %s \\\\\n',  tabular_headline); # print the headline of the tabular
+    end
+    for row_index = 1:row_size
+      if has_hline == true
+        fprintf (fid, '  \\hline\n');
+      end
+      for col_index = 1:col_size
+        if col_index == 1
+          if row_title_size != 0
+            if row_index <= row_title_size
+              fprintf (fid, '  %s & ', row_titles(row_index)); # print the row title
+            else
+              fprintf (fid, '  & '); # print an empty row title
+            end
+          end
+          fprintf (fid, '  %s ', csv{row_index, col_index});
+        else
+         fprintf (fid, '& %s ', csv{row_index, col_index});
+        end
+      end
+      fprintf (fid, '\\\\\n');
+    end
+    if has_hline == true
+      fprintf (fid, '  \\hline\n');
+    end
+    fprintf (fid, '\\end{tabular}', alignment_preamble); # print the end of the tabular
+    fclose(fid); # close the latex file after writing
+  end
+end