한글 영어가 저장되어 있는 txt 파일을 불러와 리스트에 추가하려고 하는데, 자꾸 마지막 줄이 중복 저장되어서 처리를 제대로 할 수 없는 것을 발견하였다.
예를 들어,
하나 one
둘 two
셋 three
넷 four
이라는 txt 파일을 선택해 열었다고 하자.
class Numbers
{
public string kor;
public string eng;
}
List<Numbers> num;
ReadF()
{
num = new List<Numbers>();
Numbers n = new Numbers();
OpenFileDialog ofd = new OpenFileDialog();
if(ofd.ShowDialog()==DialogResult.OK)
{
string line, k, e;
stiring[] temp = new string[2];
StreamReader sr = new StreamReader(ofd.FileName);
while(!sr.EndOfStream)
{
line = sr.ReadLine();
temp = line.Split(' ');
n.kor = temp[0];
n.eng = temp[1];
num.Add(n);
}
sr.Close();
}
}
( 코드블럭은 처음이라 정렬이 엉망이어도 이해부탁드립니다. )
이런 방식으로 실행시키면 결국 num이라는 리스트에는 "넷 four"가 네번 추가됨을 발견했다.
첫번째 ReadLine()을 했을 때 "하나 one"이 리스트에 추가되고,
두번째 ReadLine()을 했을 때 "하나 one"에 "둘 two"가 추가되는 것이 아니라, "둘 two" "둘 two"가 저장된다.
클래스가 아예 수정되어서 그런건가 ? 갑자기 그런 생각이 든다.
아직 확실하게는 모르겠다 ( 짧은 지식 ㅠ;; )
아무튼 폭풍 구글링 하다가 리스트 사용 방법에서 원소 추가에 대한 코드를 보고 혹시나 하는 마음에 수정해보았는데, 됐다 !!
class Numbers
{
public string kor;
public string eng;
//생성자 추가
public Numbers(string k, string e)
{
kor=k;
eng=e;
}
}
List<Numbers> num;
ReadF()
{
num = new List<Numbers>();
OpenFileDialog ofd = new OpenFileDialog();
if(ofd.ShowDialog()==DialogResult.OK)
{
string line, k, e;
stiring[] temp = new string[2];
StreamReader sr = new StreamReader(ofd.FileName);
while(!sr.EndOfStream)
{
line = sr.ReadLine();
temp = line.Split(' ');
kor = temp[0];
eng = temp[1];
num.Add(new Numbers(kor,eng));
}
sr.Close();
}
}
수정한 코드는 요것이다!
참고: https://freeprog.tistory.com/247
Comment