| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「C Sharp サンプルコード」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の8版が非表示)
1行目: 1行目:
==C# サンプルコード==
+
==[[C# サンプルコード]]==
[[C#][言語まとめ C#]]
+
[[C Sharp]] | [[言語まとめ C Sharp]] |
 
{{amazon|4873116503}}
 
{{amazon|4873116503}}
  
*C# Document http://msdn.microsoft.com/ja-jp/library/kx37x362.aspx
+
*[[C#]] Document http://msdn.microsoft.com/ja-jp/library/kx37x362.aspx
*.Net Class Library Reference http://msdn.microsoft.com/ja-jp/library/ms229335.aspx
+
*.Net Class Library [[R]]eference http://msdn.microsoft.com/ja-jp/library/ms229335.aspx
 
===ファイル===
 
===ファイル===
 
====ファイル名を抽出====
 
====ファイル名を抽出====
15行目: 15行目:
 
  }
 
  }
  
====エンコーディングを指定してファイルを読む====
+
====[[エンコーディング]]を指定してファイルを読む====
 +
<pre>
 
  using System;
 
  using System;
 
  using System.IO;
 
  using System.IO;
36行目: 37行目:
 
     }
 
     }
 
  }
 
  }
 +
</pre>
 +
*以下のようなエラーが出る場合
 +
<pre>
 +
System.ArgumentException: ''Shift_JIS' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. '
 +
</pre>
 +
[[File:Cshart_shift_jis.png|600px]]
 +
<pre>
 +
using System.Text;
 +
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
 +
</pre>
 +
 
====CSVファイルを解析(TextFieldParser)====
 
====CSVファイルを解析(TextFieldParser)====
 
*http://msdn.microsoft.com/ja-jp/library/x710fk43.aspx
 
*http://msdn.microsoft.com/ja-jp/library/x710fk43.aspx
 
*便利だが、どんな挙動をするのかよくわからない(どこにドキュメントがあるの?)
 
*便利だが、どんな挙動をするのかよくわからない(どこにドキュメントがあるの?)
**二重引用符で囲まれたフィールドでは、カンマはセパレータとしてではなく、値として判定してくれる(Excel仕様?)
+
**二重引用符で囲まれたフィールドでは、カンマはセパレータとしてではなく、値として判定してくれる([[Excel]]仕様?)
 
**なぜVisualBasic名前空間にある?
 
**なぜVisualBasic名前空間にある?
  
71行目: 83行目:
 
                 {
 
                 {
 
                     Console.WriteLine(e);
 
                     Console.WriteLine(e);
                     System.Environment.Exit(1);
+
                     System.En[[vi]]ronment.Exit(1);
 
                 }
 
                 }
 
             }
 
             }
94行目: 106行目:
 
  {
 
  {
 
     public FileEncodingConverter() {
 
     public FileEncodingConverter() {
         System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
+
         System.Text.Encoding.RegisterPro[[vi]]der(System.Text.CodePagesEncodingPro[[vi]]der.Instance);
 
     }
 
     }
 
   
 
   
102行目: 114行目:
 
     /// &lt;param name="srcDir"&gt;変換元ディレクトリ&lt;/param&gt;
 
     /// &lt;param name="srcDir"&gt;変換元ディレクトリ&lt;/param&gt;
 
     /// &lt;param name="dstDir"&gt;変換先ディレクトリ&lt;/param&gt;
 
     /// &lt;param name="dstDir"&gt;変換先ディレクトリ&lt;/param&gt;
     /// &lt;param name="fromEnc"&gt;変換元エンコーディング&lt;/param&gt;
+
     /// &lt;param name="fromEnc"&gt;変換元[[エンコーディング]]&lt;/param&gt;
     /// &lt;param name="toEnc"&gt;変換後エンコーディング&lt;/param&gt;
+
     /// &lt;param name="toEnc"&gt;変換後[[エンコーディング]]&lt;/param&gt;
 
     public void convertDir(string srcDir, string dstDir, string fromEnc, string toEnc)
 
     public void convertDir(string srcDir, string dstDir, string fromEnc, string toEnc)
 
     {
 
     {
124行目: 136行目:
 
     /// &lt;param name="srcFile"&gt;変換元ファイル&lt;/param&gt;
 
     /// &lt;param name="srcFile"&gt;変換元ファイル&lt;/param&gt;
 
     /// &lt;param name="dstFile"&gt;変換後ファイル&lt;/param&gt;
 
     /// &lt;param name="dstFile"&gt;変換後ファイル&lt;/param&gt;
     /// &lt;param name="fromEnc"&gt;変換元エンコーディング&lt;/param&gt;
+
     /// &lt;param name="fromEnc"&gt;変換元[[エンコーディング]]&lt;/param&gt;
     /// &lt;param name="toEnc"&gt;変換後エンコーディング&lt;/param&gt;
+
     /// &lt;param name="toEnc"&gt;変換後[[エンコーディング]]&lt;/param&gt;
 
     public void convert(string srcFile, string dstFile, string fromEnc, string toEnc)
 
     public void convert(string srcFile, string dstFile, string fromEnc, string toEnc)
 
     {
 
     {
 
         using(var writer = new StreamWriter(File.OpenWrite(dstFile),Encoding.GetEncoding(toEnc)))
 
         using(var writer = new StreamWriter(File.OpenWrite(dstFile),Encoding.GetEncoding(toEnc)))
 
         {
 
         {
             foreach(var line in File.ReadLines(srcFile, System.Text.Encoding.GetEncoding(fromEnc)))
+
             foreach(var line in File.[[R]]eadLines(srcFile, System.Text.Encoding.GetEncoding(fromEnc)))
 
             {
 
             {
 
                 writer.WriteLine(line);
 
                 writer.WriteLine(line);
139行目: 151行目:
  
 
===設定===
 
===設定===
====C# 設定情報を保存する====
+
====[[C# 設定情報を保存する]]====
*C# 設定情報を保存する
+
*[[C# 設定情報を保存する]]
  
 
===LINQ===
 
===LINQ===
====C# LINQ使用例====
+
====[[C# LINQ使用例]]====
*C# LINQ使用例
+
*[[C# LINQ使用例]]
 
===非同期処理===
 
===非同期処理===
====C# 非同期処理からUIスレッドにアクセスし画面を更新する====
+
====[[C Sharp 非同期処理からUIスレッドにアクセスし画面を更新する|C# 非同期処理からUIスレッドにアクセスし画面を更新する]]====
*C# 非同期処理からUIスレッドにアクセスし画面を更新する
+
*[[C Sharp 非同期処理からUIスレッドにアクセスし画面を更新する|C# 非同期処理からUIスレッドにアクセスし画面を更新する]]
====C# asyncとawaitの動作確認====
+
 
*C# asyncとawaitの動作確認
+
====[[C# asyncとawaitの動作確認]]====
===WPF===
+
*[[C# asyncとawaitの動作確認]]
 +
 
 +
===[[WPF]]===
 
*http://typea.info/blg/glob/wpf/
 
*http://typea.info/blg/glob/wpf/

2021年11月29日 (月) 10:34時点における最新版

C# サンプルコード

C Sharp | 言語まとめ C Sharp |

ファイル

ファイル名を抽出

var filename = Path.GetFileName(file);

ファイルを書く

using (var writer = new StreamWriter(Path.Combine(outPath, "Hoge.csv")))
{
    writer.WriteLine("Something to write.");
}

エンコーディングを指定してファイルを読む

 using System;
 using System.IO;
 namespace ConsoleApplication1
 {
      class Program
     {
         static void Main(string[] args)
         {
             string path = @"c:\work\test.csv";
             using (var reader = new StreamReader(path, System.Text.Encoding.GetEncoding("shift_jis")))
             {
                 string line = null;
                 while ((line = reader.ReadLine()) != null)
                 {
                     Console.WriteLine(line);
                 }
             }
         }
     }
 }
  • 以下のようなエラーが出る場合
System.ArgumentException: ''Shift_JIS' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. '

Cshart shift jis.png

using System.Text;
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

CSVファイルを解析(TextFieldParser)

  • http://msdn.microsoft.com/ja-jp/library/x710fk43.aspx
  • 便利だが、どんな挙動をするのかよくわからない(どこにドキュメントがあるの?)
    • 二重引用符で囲まれたフィールドでは、カンマはセパレータとしてではなく、値として判定してくれる(Excel仕様?)
    • なぜVisualBasic名前空間にある?
using System;
using Microsoft.VisualBasic.FileIO; 

namespace ConsoleApplication1
{
     class Program
    {
        static void Main(string[] args)
        {
            string path = @"c:\work\test.csv";
            using (TextFieldParser parser = new TextFieldParser(path,System.Text.Encoding.GetEncoding("shift_jis")))
            {
                parser.TextFieldType = FieldType.Delimited;
                parser.SetDelimiters(",");
                try
                {
                    while (!parser.EndOfData)
                    {
                        string[] fields = parser.ReadFields();
                        foreach (string field in fields)
                        {
                            Console.Write("[{0}]", field);
                        }
                        Console.WriteLine();
                    }
                }
                catch (MalformedLineException e)
                {
                    Console.WriteLine(e);
                    System.Environment.Exit(1);
                }
            }
        }
    }
}

UTF-8 エンコード BOMありなし

  • UTF-8をGetEncodeすると、BOMが付く。new System.Text.UTF8Encoding(false) でBOMなし
Encoding enc = null;
if(String.Equals(toEnc,"utf-8", StringComparison.OrdinalIgnoreCase)) {
    // BOMなし
    enc = new System.Text.UTF8Encoding(false);
}
else
{
    enc = Encoding.GetEncoding(toEnc);
}

ファイルエンコード一括変換

public class FileEncodingConverter
{
    public FileEncodingConverter() {
        System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
    }

    /// <summary>
    /// 指定されたディレクトリのすべてのファイルのエンコードを変換して別のディレクトリに書き出す
    /// </summary>
    /// <param name="srcDir">変換元ディレクトリ</param>
    /// <param name="dstDir">変換先ディレクトリ</param>
    /// <param name="fromEnc">変換元エンコーディング</param>
    /// <param name="toEnc">変換後エンコーディング</param>
    public void convertDir(string srcDir, string dstDir, string fromEnc, string toEnc)
    {
        if (!Directory.Exists(dstDir))
        {
            Directory.CreateDirectory(dstDir);
        }

        var files = Directory.GetFiles(srcDir);
        foreach(var file in files)
        {
            var filename = Path.GetFileName(file);
            convert(file, Path.Combine(dstDir, filename), fromEnc, toEnc);
        }
    }

    /// <summary>
    /// 指定されたファイルのエンコードを変換して別ファイルに書き出す
    /// </summary>
    /// <param name="srcFile">変換元ファイル</param>
    /// <param name="dstFile">変換後ファイル</param>
    /// <param name="fromEnc">変換元エンコーディング</param>
    /// <param name="toEnc">変換後エンコーディング</param>
    public void convert(string srcFile, string dstFile, string fromEnc, string toEnc)
    {
        using(var writer = new StreamWriter(File.OpenWrite(dstFile),Encoding.GetEncoding(toEnc)))
        {
            foreach(var line in File.ReadLines(srcFile, System.Text.Encoding.GetEncoding(fromEnc)))
            {
                writer.WriteLine(line);
            }
         }
    }
}

設定

C# 設定情報を保存する

LINQ

C# LINQ使用例

非同期処理

C# 非同期処理からUIスレッドにアクセスし画面を更新する

C# asyncとawaitの動作確認

WPF