2017-03-20 1 views
0

ユーザが選択した特定のデータを含む特定のcsvファイルをデータベースに読み込んでアップロードしようとしています。データに名前、年齢、身長が含まれているとします。問題は、名前にカンマ(、)が含まれている場合です。分割前にCSVファイルからカンマを確認して削除する

例:マーク・スミス20 170

システムは、これは別のフィールドで、分割することを考えるでしょうとして

。以下は私が使用しているコードですが、このコンマをフィルタリングして別の列に分割する前に削除する必要があります。

openFileDialog1.ShowDialog(); 
      var fileName = string.Format(openFileDialog1.FileName); 

      StreamReader sr = new StreamReader(fileName); 
      string line = sr.ReadLine(); 
      string[] value = line.Split(','); 
      DataTable dt = new DataTable(); 
      DataRow row; 
      foreach (string dc in value) 
      { 
       dt.Columns.Add(new DataColumn(dc)); 
      } 

      while (!sr.EndOfStream) 
      { 
       value = sr.ReadLine().Split(','); 
       Name cl = new Name(); 
       try 
       { 
        cl.Name= value[0].Trim('"'); 
        cl.Age= value[1].Trim('"'); 
        cl.Height= value[2].Trim('"'); 

new Data().addPerson(cl); 
} 
+1

に動作します。データ値が追加的に区切られている場合、例えば。二重引用符で囲まれている場合は、値の中のカンマをフィルタリングすることができます。 '' Mark、Smith ''、 '20'、 '170' ' –

+0

私の古いコードには数時間はアクセスできませんが、"タグ "に名前の列をラップして、タグを入力してから文字列を置換すると、csv内の –

+0

は "Mark、Fenech"、 "20"、 "170"のようになり、カラムにsplttingすると名前と姓の間のコンマは次のカラムとみなされます –

答えて

0

ここで私は一緒に仲直りした汚い解決策です。& regexを使用するより洗練されたソリューションがあるかもしれません。でもねえ、それは...あなたは私たちが列seperatorsとして使用するコンマから値内のカンマを区別する方法がありませんので、これは、できません示されているサンプルデータについては

using System.Text; 

var line = "\"Mark, Fenech\", \"20\", \"170\""; 

public static string RemoveColumnDelimitersInsideValues(string input) { 

    const char valueDelimiter = '"'; 
    const char columnDelimiter = ','; 

    StringBuilder output = new StringBuilder(); 

    bool isInsideValue = false; 
    for (var i = 0; i < input.Length; i++) { 
     var currentChar = input[i]; 

     if (currentChar == valueDelimiter) { 
      isInsideValue = !isInsideValue; 
      output.Append(currentChar); 
      continue; 
     } 

     if (currentChar != columnDelimiter || !isInsideValue) { 
      output.Append(currentChar); 
     } 
     // else ignore columnDelimiter inside value 
    } 
    return output.ToString(); 
} 

.Net Fiddle

+0

my文字列が "\"でリストされていない場合は、次のようになります: "Mark、Fenech、20、170" –

+0

'\'はちょうど使用されます値を分離する '' 'をエスケープするには、C#で' 'Mark、Fenech"、 "20"、 "170"という文字列を書きたい場合に必要です。デバッガで 'line'の値を調べると、次のようになります。私の元のコメントで述べたように、値が区切られていなければ、その中のカンマを削除することはできません。 –

+0

あなたはそれがうまくいった!ありがとう –

関連する問題