문제안에 답 있다. 는 사실을 또 체감한다. 일정한 형식이 있는 텍스트 파일을 읽어서 원하는 방식으로 재구성 하고, 결과 파일을 원래 파일이름과 비슷하게 만들어 그 파일을 생성하는 문제다.
원래 파일은 : 속담.txt
▶ 가난도 비단 가난
아무리 가난해도 체통을 잃지 않고 견딘다는 말.
▶ 가난 구제는 나라도 못한다
가난한 사람을 도와주기는 매우 어렵다.
하고많은 가난한 사람을 다 구제한다는 것은 나라의 힘으로도 어려운 일인데, 하물며 개인의 힘으로 되겠느냐는 말.
▶ 가난한 양반 씨나락 주무르듯 한다
일의 갈피를 잡지 못하고 우물쭈물하며 결말을 짓지 못하는 모양을 이를 때 쓰이는 말.
▶ 가난한 집 신주 굶듯 한다
줄곧 굶기만 한다는 말.
▶ 가난한 집 제삿날 돌아오듯
치르기 어려운 일만 자꾸 닥친다는 말.
▶ 가난할수록 기와집 짓는다
가난한 사람이 잘 사는 것처럼 보이려고 겉치장을 한다.
가난할수록 잘 살아보려고 큰일에 손댄다.
▶ 가는 날이 장날
우연히 갔다가 공교로운 일을 만났을 때 이르는 말.
위와 같은 파일을 한줄은 ▶ 로 되는 줄과 그 아래 2-3줄인 줄을 다른 한줄로 만드는 것이다. 위 파일을 처리하면 속담001.txt 파일 이름으로 결과 파일이 생성되어야 한다는게 문제이다.
▶ 가난도 비단 가난
아무리 가난해도 체통을 잃지 않고 견딘다는 말.
▶ 가난 구제는 나라도 못한다
가난한 사람을 도와주기는 매우 어렵다. 하고많은 가난한 사람을 다 구제한다는 것은 나라의 힘으로도 어려운 일인데, 하물며 개인의 힘으로 되겠느냐는 말.
▶ 가난한 양반 씨나락 주무르듯 한다
일의 갈피를 잡지 못하고 우물쭈물하며 결말을 짓지 못하는 모양을 이를 때 쓰이는 말.
▶ 가난한 집 신주 굶듯 한다
줄곧 굶기만 한다는 말.
▶ 가난한 집 제삿날 돌아오듯
치르기 어려운 일만 자꾸 닥친다는 말.
▶ 가난할수록 기와집 짓는다
가난한 사람이 잘 사는 것처럼 보이려고 겉치장을 한다. 가난할수록 잘 살아보려고 큰일에 손댄다.
▶ 가는 날이 장날
우연히 갔다가 공교로운 일을 만났을 때 이르는 말.
두 세 줄인 풀이들이 한 줄로 된 것을 확인할 수 있다. 문제는 비교적 간단한것 처럼 보이지만 흠~ 이게 또 잘 안돼다가 문제를 자세히 읽어보니 반드시 속담 줄 ▶ 이 생성되고 나서 풀이줄이 생성된다는 거다. 즉 ▶ 줄이 생성되면 무조건 풀이줄을 만들어주면 되는 일이었다.
아래코드에서
ArrayList alSorceText = new ArrayList();
ArrayList alDestinationText = new ArrayList();
public void makeDestinationFile()
{
bool isThereWord = false; // ▶ 표시가 있는 줄인것을 나타내는 플래그
for (int i = 0; i < alSorceText.Count; i++)
{
isThereWord = alSorceText[i].ToString().Contains("▶");
if (isThereWord)
{
alDestinationText.Add(alSorceText[i]); // 여기서 어레이 리스트로 만들었는데 생성해주고
alDestinationText.Add(""); // 이것을 반드시 생성해준다. 즉 그 다음줄까지 생성해준다.
}
else
{
alDestinationText[alDestinationText.Count - 1] =
alDestinationText[alDestinationText.Count - 1].ToString() + alSorceText[i];
}
isThereWord = false;
}
MessageBox.Show("complete");
}
파일과 String 다루기가 첫번째 할 일~ 그리고 아이디어~
다음으로 남은 문제가 파일 이름바꾸기 문제인데 파일의 전체 경로에서 파일 이름 + 확장자를 분리해서
. 을 중심으로 리엘네임하고 확장자 분리후 리얼네임에 변경을 해서 다시 전체 경로가 포함된 새로운 파일네임을 만들어 저장한다.
public void Makeresultfile(string fname) // fname = 전체파일경로
{
char[] charsToTrim = { '.' };
// Trim the string.
string filename = Path.GetFileName(fname); // 속담.txt
string directory = Path.GetDirectoryName(fname); // 경로만 저장 맨뒤에 \ 없다.
string[] words = filename.Split(charsToTrim);
string realFilename = words[0]; // 속담
string extension = words[1]; // txt
string newFileName = directory + "\\" + realFilename + "001." + extension; // 재조립
/* filaname change
FileInfo fi = new FileInfo(fileName);
fi.MoveTo(newName); // 이름 변경
fi.Delete(); // 파일 삭제
*/
FileStream fs = new FileStream(newFileName, FileMode.Create);
//새로 만들기(FileMode.CreateNew),
//있으면 내용를 지우기(FileMode.Truncate)
StreamWriter sw = new StreamWriter(fs, Encoding.Default);
string message = string.Empty;
for (int i = 0; i < alDestinationText.Count; i++)
{
sw.WriteLine(alDestinationText[i].ToString());
}
sw.Flush();
}
이런식으로 하면 원하는 대로 파일이름을 다룰 수 있고, 파일 구성도 마음대로 변경할 수 있다.
'개발자 > C#' 카테고리의 다른 글
앞에 0 붙이고 소숫점 한자리 표현 식 (0) | 2013.10.08 |
---|---|
Code Review Checklist and Guidelines for C# Developers (0) | 2013.06.04 |
C# Audio Tutorial 1 - Wave File with NAudio (0) | 2013.03.26 |
폼의 제목변경 코드에서 (0) | 2012.10.16 |
c# 콤보박스 자동 완성 기능을 구현하는 다른 방법 (0) | 2012.10.01 |
c# 콤보박스 자동완성 기능을 구현 - 리스트박스,텍스트박스에서도 동일한 원리 (1) | 2012.09.26 |
Infrasound 관측망과 인공발파 식별연구 (0) | 2012.07.29 |
C# 파일 없으면 만들어 쓰고 있으면 한줄씩 읽어오는 코드 (1) | 2012.07.20 |
더욱 좋은 정보를 제공하겠습니다.~ ^^