/// <summary> /// ダブルクォーテーションまたはシングルクォーテーションでくくられた文字を読み出す。 /// 返す文字列はダブルクォーテーション(またはシングルクォーテーション)を外した状態で返す。 /// </summary> /// <param name="reader">読み込み元</param> /// <param name="quoatChar">くくり文字</param> /// <returns>読み込んだ文字列</returns> private static string ReadQuoatedString(LocalReader reader, char quoatChar) { reader.Read(); // 文字列型 次の'\"'が出てくるまで読む。 StringBuilder sb = new StringBuilder(); while (!reader.EndOfStream) { char c = (char)(reader.Read()); if (c == quoatChar) { break; } else if (c == '\\') { sb.Append(c); sb.Append((char)(reader.Read())); } else { sb.Append(c); } } return(sb.ToString()); }
/// <summary> /// 数字データを読み込む。 /// </summary> /// <param name="reader">読み込み元</param> /// <returns>数字</returns> private static string ReadNumberString(LocalReader reader) { // 数値プリミティブ char c = reader.Read(); StringBuilder sb = new StringBuilder(); if (c != '+') { sb.Append(c); } // 数字か.が出る限り追加。 string pattern = "0123456789."; while (!reader.EndOfStream) { c = reader.Peek(); if (pattern.IndexOf(c) >= 0) { reader.Consume(); sb.Append(c); if (c == '.') { pattern = "0123456789"; } } else { break; } } return(sb.ToString()); }
/// <summary> /// ダブルクォーテーションまたはシングルクォーテーションでくくられた文字を読み出す。 /// 返す文字列はダブルクォーテーション(またはシングルクォーテーション)を外した状態で返す。 /// </summary> /// <param name="reader">読み込み元</param> /// <param name="quoatChar">くくり文字</param> /// <returns>読み込んだ文字列</returns> private string ReadQuoatedString(LocalReader reader, char quoatChar) { reader.Read(); // 文字列型 次の'\"'が出てくるまで読む。 StringBuilder sb = new StringBuilder(); while (!reader.EndOfStream) { char c = (char)(reader.Read()); if (c == quoatChar) { break; } else if (c == '\\') { // エスケープシーケンス // 一応次の文字次第で処理を変更する。 char nextChar = reader.Peek(); switch (nextChar) { case '\'': // \' シングルクォーテーション reader.Consume(); sb.Append('\''); break; case '\"': // \" ダブルクォーテーション reader.Consume(); sb.Append('\"'); break; case 'r': // \r 改行 reader.Consume(); sb.Append('\r'); break; case 'n': // \n 改行 reader.Consume(); sb.Append('\n'); break; case 't': // \t タブ reader.Consume(); sb.Append('\t'); break; case '\\': // エスケープコード reader.Consume(); sb.Append('\\'); break; default: sb.Append(c); break; } } else { sb.Append(c); } } return(sb.ToString()); }