예제 #1
0
        /// <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());
        }
예제 #2
0
        /// <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());
        }
예제 #3
0
        /// <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());
        }