/// <summary>
/// string이 여러줄인 경우 해당하는 줄의 string을 반환
/// </summary>
/// <param name="text">input text</param>
/// <param name="lineNo">Line Number</param>
/// <returns></returns>
public static string GetLineString(string text, int lineNo)
{
string[] lines = text.Replace("\r", "").Split('\n');
return lines.Length >= lineNo ? lines[lineNo - 1].Trim() : null;
}
/// <summary>
/// 가져오고 싶은 라인이 여러 라인인 경우
/// </summary>
/// <param name="text">input text</param>
/// <param name="startNo">start line</param>
/// <param name="endNo">end line</param>
/// <returns></returns>
public static string GetLineString(string text, int startNo, int endNo)
{
StringBuilder sb = new StringBuilder();
for (int i = startNo; i < endNo; i++)
{
string matchText = GetLineString(text, i);
if (matchText != null)
sb.AppendLine(matchText);
}
return sb.ToString();
}
/// <summary>
/// 해당 내용이 들어있는 LineNumber를 반환
/// </summary>
/// <param name="text">input text</param>
/// <param name="match">filter</param>
/// <returns></returns>
public static int GetStringLine(string text, string match, bool regexFlag)
{
int returnCnt = -1;
int cnt = 0;
using (StringReader reader = new StringReader(text))
{
string line;
while ((line = reader.ReadLine()) != null)
{
line = line.Trim().Replace(" ", "").Replace("(", "<").Replace(")", ">");
cnt++;
if (regexFlag)
{
if (string.IsNullOrEmpty(line))
continue;
//string pattern = string.Format(@"^[0-9][.|)][\s?]{0}.*", match);
string pattern = string.Format(@"^[0-9]+[.|)]{0}.*", match.Replace(" ", "").Replace("(", "<").Replace(")", ">").Trim());
Regex r = new Regex(pattern);
Match m = r.Match(line);
if (m.Success)
{
if (!m.Value.Contains(":"))
{
returnCnt = cnt;
break;
}
}
}
else
{
if (line.ToLower().Contains(match))
{
returnCnt = cnt;
break;
}
}
}
}
return returnCnt;
}
/// <summary>
/// 해당하는 문자열의 라인수를 모두 찾음
/// </summary>
/// <param name="text">input text</param>
/// <param name="match">filter</param>
/// <returns></returns>
public static List<int> GetStringLines(string text, string match)
{
List<int> rtn = new List<int>();
int cnt = 0;
using (StringReader reader = new StringReader(text))
{
string line;
while ((line = reader.ReadLine()) != null)
{
line = line.Trim();
cnt++;
if (line.ToLower().Contains(match.ToLower().Replace(" ", "")))
{
rtn.Add(cnt);
}
}
}
return rtn;
}
/// <summary>
/// 해당 문자열의 총 라인 수를 반환
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static int LineCount(this string input)
{
return input.LineReader().Count;
}