using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
namespace automating_system_report
{
#region RAWDATASTRUCT
public class RAWDATASTRUCT
{
public int col, row; // FieldValue가 있던, raw 파일 내에서의 위치
public string FieldValue; // rawData 하나의 값
}
#endregion /RAWDATASTRUCT
#region RawDataLOADER
///
/// XML에 추가할 RAWDATA를 로드하고, list에 등록하는 클래스
/// fieldDelimiter의 값에 따라 필드구분을 하려고 했으나, 기본값 " "으로만 동작.
///
class RawDATALoader:FileManager
{
#region public Member
public string filedDelimiter = " ";//텍스트파일의 필드구분자, 기본값 spacebar 를 필드 구분으로 함.
public List rawdataList = new List();
#endregion /public Member
#region public Method
public bool Load(string filename) //
{
FullPath = filename;
if (ExistFile)
{
FileStream fs = File.OpenRead(filename);
StreamReader sr = new StreamReader(fs);
int row = 0;// 줄 수
while (sr.Peek() > -1) //한줄 한줄 배열에 저장
{
SaveToList(sr.ReadLine(), row);
row ++;
}
sr.Close();
fs.Close();
return true;
}
return false;
}
public string[,] To2DArray()
{
int SizeCol = rawdataList[rawdataList.Count - 1].col;
int SizeRow = rawdataList[rawdataList.Count - 1].row;
string[,] rtnArray = new string[SizeRow + 1, SizeCol + 1];
int i = 0;
foreach (RAWDATASTRUCT r in rawdataList)
{
rtnArray[r.row, r.col] = r.FieldValue;
}
return rtnArray;
}
#endregion /public Method
#region private Method
private bool SaveToList(string buf,int row)
{
int whereIsDelimiter = 0; //필드구분자의 문자열 내에서 위치
int col = 0; // 필드 순번..
string cropElement;
buf=buf.Trim(); //앞이나 뒤에서 공백을 필드로 오인하는 것을 방지하기 위해 앞뒤 공백 삭제
try
{
do
{
whereIsDelimiter = buf.IndexOf(filedDelimiter); //맨 왼쪽 필드 한 개의 길이를 찾기 위해,공백을 찾음.
if (whereIsDelimiter > -1) //공백을 찾은 경우
{
cropElement = buf.Substring(0, whereIsDelimiter); // 찾은 단일 필드를 저장하기 위해 임시로 변수에 저장
buf = buf.Remove(0, whereIsDelimiter); //다음 반복을 위해 buf에서 크롭한 부분 제거
}
else//공백을 못찾은 마지막 필드인 경우
{
cropElement = buf;
}
RAWDATASTRUCT fieldAdd = new RAWDATASTRUCT(); //crop한 필드를 저장하기 위해 임시 RAWDATASTRUCT를 만듬.
fieldAdd.FieldValue = cropElement;
fieldAdd.row = row; //텍스트 문서상의 줄 위치, 2차원 배열 생성시 사용됨
fieldAdd.col = col; //컬럼값, 2차원 배열 생성시 사용됨
rawdataList.Add(fieldAdd);//crop한 필드를 리스트에 저장
buf = buf.TrimStart(); //문자열 앞의 의미없는 공백제거
col += 1;
} while (buf != null & whereIsDelimiter > -1); //buf가 null일 때까지, 더 이상 필드가 없을 때까지 반복.
return true;
}
catch (Exception e)
{
MessageBox.Show(e.Message);
return false;
}
}
#endregion /private Method
}
#endregion /RawDataLOADER
}
//
2012-06-28
C# 텍스트파일을 읽어서 2차원 배열로 만들기
성능 데이터가 기록된 텍스트 파일을 열어서 엑셀에 붙여넣기 하기 위해 만듬.
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기