본문 바로가기

개발자/C#

파일의 재구성~ 파일 이름 다루고, 파일 구성을 바꾸기



문제안에 답 있다. 는 사실을 또 체감한다. 일정한 형식이 있는 텍스트 파일을 읽어서 원하는 방식으로 재구성 하고, 결과 파일을 원래 파일이름과 비슷하게 만들어 그 파일을 생성하는 문제다.



 


원래 파일은 : 속담.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();

}



이런식으로 하면 원하는 대로 파일이름을 다룰 수 있고, 파일 구성도 마음대로 변경할 수 있다.