2015-03-19 4 views
0

Я написал таблицу данных в файл, разделенный на трубы (|), используя приведенный ниже код. проблема в том, что в html-шаблоне содержится \ r \ n. из-за \ r \ n данные передаются по строкам в файле psv. чтобы преодолеть это, я попробовал несколько способов разрешить это, но не повезло .. поэтому проблема происходит, когда когда-либо у меня были данные, содержащие \ r \ n .. кто-нибудь догадывается, почему эта проблема происходит.Запись таблицы данных в файл с разделяемым файлом (.psv) в C#

public static void start() 
      { 
      string filePath = @"E:\Files\2.psv; 
      string ConnectionString = "server=localhost;database=sql  
             sample;Integrated Security=SSPI;"; 
      con.ConnectionString = ConnectionString; 
      SqlCommand cmd = new SqlCommand(); 
      cmd.Connection = con; 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.CommandText = "[dbo].[getDetailsCodeId]"; 
      cmd.Parameters.AddWithValue("@id", Id); 
      con.Open(); 

      DataSet ds = new DataSet(); 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      da.Fill(ds); 
      DataTable dt = new DataTable(); 
      dt = ds.Tables[0]; 
      StringBuilder sb = new StringBuilder(); 
      bool isColumnNameAppend = false; 
      FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate,  
      FileAccess.ReadWrite); 
      StreamWriter str = new StreamWriter(fs); 
      int count = dt.Columns.Count; 
      str.BaseStream.Seek(0, SeekOrigin.End); 

      if (!isColumnNameAppend) 
      { 
       for (int i = 0; i < count; i++) 
       { 
        sb.Append(dt.Columns[i].ColumnName + '|'); 
       } 
       sb.Append(Environment.NewLine); 
       isColumnNameAppend = true; 
      } 

      for (int j = 0; j < dt.Rows.Count; j++) 
      { 
       for (int k = 0; k < dt.Columns.Count; k++) 
       { 
        sb.Append(PsvQuote((dt.Rows[j][k].ToString())) + '|'); 
       } 
       sb.Append(Environment.NewLine); 
      } 

      str.Write(sb.ToString()); 
      str.Flush(); 
      str.Close(); 
      fs.Close(); 
      } 

    public static string PsvQuote(string text) 
    { 
       text = String.Format("\"{0}\"", text); 
       return text; 
    } 

ответ

0
public static string PsvQuote(string text) 
    { 
       text = String.Format("\"{0}\"", text.Replace("|","").Replace("\r","").Replace("\n",""); 
       return text; 
    } 
+0

Спасибо за ответ ... но это ответил мне 50% только. Я могу видеть только половину данных в файле psv. Остальные данные были потеряны ... – user3301440

+0

Остальная часть кода выглядит хорошо для меня. Это немного запутанно, но он должен работать нормально, если вы хотите, чтобы труба была последней в каждой из ваших строк. Это немного необычно, но ваш выбор. Возможно, вам нужно изучить ваш метод тестирования. –

+0

Я также пробовал с кодом ниже, но получаю еще одну проблему, как усечение данных .. Я уверен, что проверенный код, но я не могу найти, где строка вопроса.Join ("", Regex.Split (text, @ "(?: \ г \ п | \ п | \ г) ")); – user3301440