以前は C 言語でコーディングしていましたが、このscanf
関数は非常に便利でした。残念ながら、C# には同等のものはありません。
私はそれを使用して半構造化テキストファイルを解析しています。
ここscanf
で実装の興味深い例を見つけました。残念ながら、それは古くて不完全に見えます。
scanf
C#の実装を知っている人はいますか? または、少なくとも逆として機能するものはありstring.Format
ますか?
ファイルは「半構造化」されているため、ReadLine() メソッドと TryParse() メソッドの組み合わせ、または Regex クラスを使用してデータを解析することはできませんか?
sscanf()
正規表現が機能しない場合は、.NETの代わりに投稿しました。コードは、 http://www.blackbeltcoder.com/Articles/strings/a-sscanf-replacement-for-netで表示およびダウンロードできます。
C ランタイム ライブラリから直接 scanf を使用できますが、さまざまなパラメーター数で実行する必要がある場合、これは困難な場合があります。タスクの正規表現を使用するか、そのタスクをここで説明することをお勧めします。別の方法があるかもしれません。
c# に scanf のような関数がないのには十分な理由があります。エラーが発生しやすく、柔軟ではありません。正規表現を使用すると、はるかに柔軟で強力になります。
もう 1 つの利点は、コードのさまざまな部分で同じものを解析する必要がある場合に、コード全体で簡単に再利用できることです。
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());
}
System.IO.FileStream と System.IO.StreamReader を使用して、そこから解析できます。
これはちょっと粗雑に見えますが、仕事を成し遂げます:
// 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 をレコードの個々の変数として使用できます。