문제안에 답 있다. 는 사실을 또 체감한다. 일정한 형식이 있는 텍스트 파일을 읽어서 원하는 방식으로 재구성 하고, 결과 파일을 원래 파일이름과 비슷하게 만들어 그 파일을 생성하는 문제다.
원래 파일은 : 속담.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 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
캐어랩