Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/07/12 16:28:33 (11 years ago)
Author:
mkommend
Message:

#1942: Reintegrated branch for CSV import.

Location:
trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis

  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/DataAnalysisInstanceProvider.cs

    r8598 r8877  
    2323using System.Collections;
    2424using System.Collections.Generic;
     25using System.Globalization;
     26using System.IO;
    2527using System.Linq;
     28using System.Text;
    2629using HeuristicLab.Problems.DataAnalysis;
     30using HeuristicLab.Random;
    2731
    2832namespace HeuristicLab.Problems.Instances.DataAnalysis {
    29   public abstract class DataAnalysisInstanceProvider<TData> : ProblemInstanceProvider<TData>
    30     where TData : class, IDataAnalysisProblemData {
     33  public abstract class DataAnalysisInstanceProvider<TData, ImportType> : ProblemInstanceProvider<TData>
     34    where TData : class, IDataAnalysisProblemData
     35    where ImportType : DataAnalysisImportType {
    3136
    3237    // has to be implemented, if CanImportData is true
    33     public virtual TData ImportData(string path, DataAnalysisImportType type) {
    34       throw new NotSupportedException();
     38    public TData ImportData(string path, ImportType type) {
     39      TableFileParser csvFileParser = new TableFileParser();
     40      csvFileParser.Parse(path);
     41      return ImportData(path, type, csvFileParser);
    3542    }
     43    public TData ImportData(string path, ImportType type, DataAnalysisCSVFormat csvFormat) {
     44      TableFileParser csvFileParser = new TableFileParser();
     45      csvFileParser.Parse(path, csvFormat.NumberFormatInfo, csvFormat.DateTimeFormatInfo, csvFormat.Separator);
     46      return ImportData(path, type, csvFileParser);
     47    }
     48
     49    protected abstract TData ImportData(string path, ImportType type, TableFileParser csvFileParser);
    3650
    3751    protected List<IList> Shuffle(List<IList> values) {
    3852      int count = values.First().Count;
    39       int[] indices = GetRandomIndices(count);
     53      int[] indices = Enumerable.Range(0, count).Shuffle(new FastRandom()).ToArray();
    4054      List<IList> shuffeledValues = new List<IList>(values.Count);
    4155      for (int col = 0; col < values.Count; col++) {
     
    5771    }
    5872
    59     //Fisher–Yates shuffle
    60     private int[] GetRandomIndices(int amount) {
    61       int[] randomIndices = Enumerable.Range(0, amount).ToArray();
    62       System.Random rand = new System.Random();
    63       int n = amount;
    64       while (n > 1) {
    65         n--;
    66         int k = rand.Next(n + 1);
    67         int value = randomIndices[k];
    68         randomIndices[k] = randomIndices[n];
    69         randomIndices[n] = value;
     73    public override bool CanExportData {
     74      get { return true; }
     75    }
     76    public override void ExportData(TData instance, string path) {
     77      var strBuilder = new StringBuilder();
     78      var colSep = CultureInfo.CurrentCulture.TextInfo.ListSeparator;
     79      foreach (var variable in instance.Dataset.VariableNames) {
     80        strBuilder.Append(variable.Replace(colSep, String.Empty) + colSep);
    7081      }
    71       return randomIndices;
     82      strBuilder.Remove(strBuilder.Length - colSep.Length, colSep.Length);
     83      strBuilder.AppendLine();
     84
     85      var dataset = instance.Dataset;
     86
     87      for (int i = 0; i < dataset.Rows; i++) {
     88        for (int j = 0; j < dataset.Columns; j++) {
     89          if (j > 0) strBuilder.Append(colSep);
     90          strBuilder.Append(dataset.GetValue(i, j));
     91        }
     92        strBuilder.AppendLine();
     93      }
     94
     95      using (var writer = new StreamWriter(path)) {
     96        writer.Write(strBuilder);
     97      }
    7298    }
    7399  }
Note: See TracChangeset for help on using the changeset viewer.