본문 바로가기
프로그래밍/C#.NET

[C#] 파일 stream 읽기

by Daily Investing 2012. 9. 21.
반응형

 출처 : http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040102&docId=152197335&qb=YyMg7J2066mU7J28&enc=utf8&section=kin&rank=2&search_sort=0&spq=0&pid=RaX3135Y7udssZpI4%2Bdssc--198986&sid=UFu312ygW1AAAEp6ErU

 

student.csv파일에 이름,주소,메일순으로 정보들이 나열되어있습니다.

이름,주소,메일은 컴마로 분리되어 있고요

aclass클래스와 이로 부터 상속을 받은 bclass를 만들고

aclass클래스의 멤버변수는 각각 name과 address로 합니다.

bclass클래스의 멤버변수는 email로 합니다

bclass클래스의 멤버함수는 Display로 합니다. 이 때 Display 멤버함수(또는 메소드)의 기능은 Student.csv의 정보를 화면에 출력하는 것입니다. 화면의 출력을 위해 WriteLine함수를 사용합니다.

해야하는건 프로젝트는 Console application으로 생성하고 프로젝트명은 DisplayAddress로 합니다.

aclass와 bclass클래스를 각각 생성하고 멤버변수와 멤버함수를 생성합니다.

프로그램의 진입점인 Main함수에서 StreamReader를 이용하여 "student.csv"파일을 불러옵니다.

파일을 전체적으로 읽어 데이터의 개수가 몇개인지 파악하고 bclass 배열의 객체를 데이터의 개수 만큼 생성합니다.

파일을 다시 읽어 bclass 배열의 객체 요소에 성명,주소,메일을 할당합니다

bclass 배열의 객체에 들어 있는 값은 foreach문장과 Display멤버함수를 이용하여 출력해야하는건데

이름,주소,메일은 모두 string형으로 지정해야합니다

이거 코드를 어떻게 짜야하나요 중심내용도 설명해주시면 감사하겠습니다

C#초보라서 잘 못합니다 ㅜㅜ

 

-------------------------------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.IO;
namespace DisplayAddress
{
     class A
      {
             public string name;
             public string address;
      }
      class B : A
      {
             public string email;
             public void Display()
             {
                    Console.WriteLine("이름={0}, 주소={1}, 이메일={2}", this.name, this.address, this.email);
             }
      }
      class Program
      {
             static void Main(string[] args)
             {
                    StreamReader reader = new StreamReader("C:\\a.csv");
                    int line=0;
                    int pos = 0;
                    B[] bObject = null;
                    string tmp = string.Empty;
                    string[] arr = null;
                    while(!reader.EndOfStream)
                    {
                           reader.ReadLine();
                           line++;
                    }
                    bObject = new B[line];
                    reader.BaseStream.Seek(0, SeekOrigin.Begin);
                    
                    
                    while (!reader.EndOfStream)
                    {
                           tmp = reader.ReadLine();
                           arr= tmp.Split(new string[] { "," }, StringSplitOptions.None);
                           bObject[pos] = new B();
                           bObject[pos].name = arr[0];
                           bObject[pos].address = arr[1];
                           bObject[pos].email = arr[2];
                    }
                    foreach (B o in bObject)
                    {
                           o.Display();
                    }
                    reader.Close();
             }
      }
 }

반응형