/// <summary> /// 指定した行がエントリーの行かどうか判定します。 /// </summary> /// <param name="line">判定する行</param> /// <returns>与えられた行がエントリーの行ならば true</returns> /// <remarks> /// 指定した行がエントリーの行かどうかを判定します。 /// 先頭に '=' がある場合はエントリー名が無いエントリーと解釈できますが、 /// これは不正と判定します。 /// </remarks> static bool IsEntryLine(string line) { if (Utl.IndexNotOfAny(line, " \t=") < line.IndexOf("=")) { return(true); } return(false); }
/// <summary> /// エントリーの行からパラメータを抽出します。 /// </summary> /// <param name="line">解析する行</param> /// <param name="entryName">エントリー名</param> /// <param name="entryValue">エントリーの値</param> static bool ParseLineAsEntry(string line, out string entryName, out string entryValue) { int nameBegin, nameEnd; int valueBegin, valueEnd; // find where the entry name begins nameBegin = Utl.IndexNotOfAny(line, " \t=", 0); if (nameBegin == -1) { goto error; } // find where the entry name ends nameEnd = Utl.LastIndexNotOfAny(line, " \t=", line.IndexOf("=")); if (nameEnd == -1) { goto error; } nameEnd++; // find where the entry value begins valueBegin = Utl.IndexNotOfAny(line, " \t=", nameEnd); if (valueBegin == -1) { goto error; } // find where the entry value ends valueEnd = line.Length - 1; if (valueEnd == -1) { Debug.Fail("this case must not be occurred."); goto error; } valueEnd++; // extract entry's name and value entryName = line.Substring(nameBegin, nameEnd - nameBegin); entryValue = line.Substring(valueBegin, valueEnd - valueBegin); return(true); error: // if an error has occured, clear output values and exit entryName = null; entryValue = null; return(false); }