34

以前は C 言語でコーディングしていましたが、このscanf関数は非常に便利でした。残念ながら、C# には同等のものはありません。

私はそれを使用して半構造化テキストファイルを解析しています。

ここscanfで実装の興味深い例を見つけました。残念ながら、それは古くて不完全に見えます。

scanfC#の実装を知っている人はいますか? または、少なくとも逆として機能するものはありstring.Formatますか?

4

9 に答える 9

9

ファイルは「半構造化」されているため、ReadLine() メソッドと TryParse() メソッドの組み合わせ、または Regex クラスを使用してデータを解析することはできませんか?

于 2009-01-23T07:53:45.993 に答える
7

sscanf()正規表現が機能しない場合は、.NETの代わりに投稿しました。コードは、 http://www.blackbeltcoder.com/Articles/strings/a-sscanf-replacement-for-netで表示およびダウンロードできます。

于 2011-02-25T06:17:14.010 に答える
5

C ランタイム ライブラリから直接 scanf を使用できますが、さまざまなパラメーター数で実行する必要がある場合、これは困難な場合があります。タスクの正規表現を使用するか、そのタスクをここで説明することをお勧めします。別の方法があるかもしれません。

于 2009-01-23T07:54:15.243 に答える
4

c# に scanf のような関数がないのには十分な理由があります。エラーが発生しやすく、柔軟ではありません。正規表現を使用すると、はるかに柔軟で強力になります。

もう 1 つの利点は、コードのさまざまな部分で同じものを解析する必要がある場合に、コード全体で簡単に再利用できることです。

于 2010-06-22T06:38:52.360 に答える
2

C# ライブラリ関数の Parse または Convert が必要だと思います。

// here's an example of getting the hex value from a command line 
// program.exe 0x00080000

static void Main(string[] args)
{
    int value = Convert.ToInt32(args[1].Substring(2), 16);
    Console.Out.WriteLine("Value is: " + value.ToString());
}
于 2009-09-30T20:58:15.670 に答える
0

System.IO.FileStream と System.IO.StreamReader を使用して、そこから解析できます。

于 2009-01-23T07:58:08.357 に答える
-2

これはちょっと粗雑に見えますが、仕事を成し遂げます:

// Create the stream reader
sr = new StreamReader("myFile.txt");

// Read it
srRec = sr.ReadLine();

// Replace multiple spaces with one space
String rec1 = srRec.Replace("          ", " ");
String rec2 = rec1.Replace("         ", " ");
String rec3 = rec2.Replace("        ", " ");
String rec4 = rec3.Replace("       ", " ");
String rec5 = rec4.Replace("      ", " ");
String rec6 = rec5.Replace("     ", " ");
String rec7 = rec6.Replace("    ", " ");
String rec8 = rec7.Replace("   ", " ");
String rec9 = rec8.Replace("  ", " ");

// Finally split the string into an array of strings with Split
String[] srVals = rec9.Split(' ');

その後、配列 srVals をレコードの個々の変数として使用できます。

于 2016-01-06T01:48:22.467 に答える