2016-05-05 9 views
0

私はC言語で新しくなっています。例えば、を3つ挿入することです。たとえば、10,Jesus,1234のように、コマ送りで区切って挿入すると、その値を.CSVファイル、CSVファイルをエクスポートする.CSVファイルを作成します。

方法は、この

static void Main(string[] args) 
    { 
     Console.Write("Insert a number followed by name and finally another number \n" + "* Note: Insert all values separated by comas"); 

     int value1 = Convert.ToInt32(Console.ReadLine()); 
     string value2 = Console.ReadLine(); 
     int value3 = Convert.ToInt32(Console.ReadLine()); 


     string filePath = "Your path of the location" + "filename.csv"; 
     if (!File.Exists(filePath)) 
     { 
      File.Create(filePath).Close(); 
     } 
     var line = string.Format("{0},{1},{2}", value1, value2, value3); 
     StringBuilder sb = new StringBuilder(); 
     File.AppendAllText(filePath, line); 
     Console.ReadKey(); 
    } 
    } 
} 

は、どのように私は昏睡で区切られた値およびエクスポート.csvファイルを挿入するために行うことができますか?

+0

文字列だけでなく任意の型の配列をどのように結合するのかという疑問はありますか? – Chris

+0

これによれば、必要に応じてファイルが作成されると記載されています。https://msdn.microsoft.com/en-us/library/ms143356%28v=vs.110%29.aspx –

+0

値をコンマで区切って挿入し、別の列のように読み込み、最後に.CSVファイルにエクスポートします。たとえば、10、Jose、1000、最初の列は10、2番目のJose、最後の列は1000です。@Chris – Eduard

答えて

0

が使用することを検討してください:

String strText; 

strText = String.Format("{0},{1},{2}", value1, value2, value3); 

File.AppendAllText(filePath, strText); 
0

あなたは、なぜそれに新しい行を追加していない、ファイルが既にあるコンテンツを気にしない場合は?

static void Main(string[] args) 
{ 
    Console.Write("Insert a number followed by name and finally another number \n" + "* Note: Insert all values separated by comas"); 

    int value1 = Convert.ToInt32(Console.ReadLine()); 
    string value2 = Console.ReadLine(); 
    int value3 = Convert.ToInt32(Console.ReadLine()); 


    string filePath = "Your path of the location" + "filename.csv"; 
    File.AppendAllText(filePath, string.Join(",", value1, value2, value3) + Environment.NewLine); 

    Console.ReadKey(); 
} 

EDIT:OPさんのコメントに基づいて更新

static void Main(string[] args) 
{ 
    var filePath = "Your path of the location" + "filename.csv"; 

    Console.WriteLine("Insert a number followed by name and finally another number"); 
    Console.WriteLine("* Note: Insert all values separated by commas (ex: 10,Jesus,2000)"); 
    Console.WriteLine("* Note: Enter a blank line to exit"); 

    while(true) // Ad infinitum 
    { 
     var input = Console.ReadLine(); 

     // on blank line, confirm before exiting the application 
     if (string.IsNullOrWhiteSpace(input)) 
     { 
      Console.WriteLine("Do you want to exit the application? (y/n)"); 
      if (Console.ReadLine().ToUpperInvariant() == "Y") 
       break; 

      continue; 
     } 

     // input validation : number, anything, number 
     var values = input.Split(','); 
     if (values.Length != 3 || !Regex.IsMatch(values[0], @"\d+") || !Regex.IsMatch(values[2], @"\d+")) 
     { 
      Console.WriteLine("Invalid input"); 
      continue; 
     } 

     // save save to the file 
     File.AppendAllText(filePath, string.Join(",", values) + Environment.NewLine); 
     Console.WriteLine("The values has been inserted into the csv."); 

    } // rince and repeat 
} 
+0

問題は、例えば '10、Jesus、2000'のようにレジスタごとに1行だけ挿入したいのですが、もしプログラムがint、string、intを別の行に入れているとすればどうすればいいですか? – Eduard

+0

'' number、text、number "'を一行で入力し、そのような複数の入力をアプリケーションが受け入れるようにしたいのですか? – Xiaoy312

+0

はい、それを.csvファイルにエクスポートした後 – Eduard

0

ユーザーがカンマで区切られた1つの行を入力したい場合、あなたは一度だけConsole.ReadLine()を呼び出す必要があります。次に、String.Split()を使用してそれらを変数に入れることができます。

var input = Console.ReadLine(); 
var values = input.Split(','); 
var value1 = Convert.ToInt32(values[0]); 
var value2 = values[1]; 
var value3 = Convert.ToInt32(values[2]); 

次にあなたが戻ってString.Formatを使用して、単一の行に3つの値を回すか、そして、C#6 string interpolationを使用している場合。

var line = string.Format("{0},{1},{2}", value1, value2, value3); 

または、C#6と文字列補間のため:

var line = $"{value1},{value2},{value3}"; 

その後、あなたはファイルにアウトこの行を書くことができ、あなたのコードは次のようになりString.Formatのを使用して例えば

、 :

File.AppendAllText(filePath, line); 

ただし、カンマ区切りの値のセットを受け入れることはできませんmを構成部分に入れ、それらを再結合する。なぜユーザーがファイルに入力する行を書くだけではないのですか?

+0

あなたが言うように、私は私の質問のコードを編集しますが、問題は '10、Jose、1000'のような値を挿入することができないことです、明らかにプログラムがintを最初に習得したいので、これらの値を1つの文字列で読んで分離する(私は分割機能を使用できないという制限がある) – Eduard

+0

ああ、ユーザーに '10、Jose、1000'のような値を入力させ、プログラムに分割させたい?その場合、[String.Split()](https://msdn.microsoft.com/en-us/library/b873y76a.aspx)を使用し、 'Console.ReadLine() 'を1回だけ呼び出す必要があります。 –

+0

まさに私はそれをしたいと思っています!しかし、プログラムの1つの制限は私が分割機能を使用することができないということです。 – Eduard

関連する問題