쉼표로 구분 된 보고서가 포함 된 CSV 파일을 읽는 작은 프로그램이 있습니다. 보고서 내에서 필드 중 하나는 날짜입니다.이 날짜는 날짜/시간으로 변환되며 특정 시간 프레임 내에있는 정보 만 가져옵니다. 여기 내 문제는 : 보고서는 실제로 특정 시스템에서 실행되는 작업 목록입니다. 그러나 작업 이름 중 일부는 쉼표를 자체적으로 포함합니다. 즉, 작업 이름에 쉼표가 있으면 작업 이름이 2 개의 셀로 나뉘어지기 때문에 Excel 출력 보고서는 매우 혼란 스럽습니다. 나는 프로그래밍에 조금 익숙하기 때문에 이것을 해결할 수있는 유일한 방법은 콤마로 구분 된 배열에서 필드가 몇 개인 지 확인하는 것입니다. 그리고 그것이 정상보다 크다면, 나는 직업 이름이 될 것이라는 것을 알고있는 분야 중 두 개를 연결할 것입니다. 그러나 작업 이름에 쉼표 2 개가 있으면 데이터에서 쉼표 1 개만 처리하도록 설정되어 있기 때문에 작동하지 않습니다.다른 배열의 배열 필드 바꾸기
내가 추가해야하는 것은 내가 읽은 CSV 보고서가 다른 응용 프로그램에 의해 생성되는데, 여기에서 어떻게 구분되는지는 제어 할 수 없습니다. 그렇지 않으면, 나는 그것을 파이프 또는 일종의 것으로 바꿀 것이다.
의견이 있으십니까? 다음은 그것을 다루는 코드의 일부입니다 :
StreamReader SR = new StreamReader(inputFile);
StreamWriter SW = new StreamWriter(outputFile);
string records;
//read headers from first line
string headers = records = SR.ReadLine();
SW.WriteLine(headers);
DateTime YesterdayAM = Convert.ToDateTime(DateTime.Now.AddDays(-1).ToShortDateString() + " 05:00:00 AM");
while ((records = SR.ReadLine()) != null)
{
if (records.Trim().Length > 0)
{
string daterecord = GetDateTimeFromStringArray(records);
if (daterecord.Length > 0)
{
DateTime recordDate = Convert.ToDateTime(daterecord);
if (recordDate >= YesterdayAM)
{
string[] checkfields = records.Split(',');
if (checkfields.Length > 13)
{
string[] replacefields = { checkfields[0], checkfields[1] + " " + checkfields[2], checkfields[3], checkfields[4], checkfields[5], checkfields[6], checkfields[7], checkfields[8], checkfields[9], checkfields[10], checkfields[11], checkfields[12] };
for (int i = 0; i < replacefields.Length; i++)
{
SW.Write(replacefields[i] + ",");
}
SW.Write(Environment.NewLine);
}
else
{
SW.WriteLine(records);
}
}
}
}
}
이것은 비슷한 질문이라고 생각합니다. http://stackoverflow.com/questions/769621/dealing-with-commas-in-a-csv-file – skeryl
일반적으로 CSV 파일에서 셀에 구분 기호가 있으면 따옴표로 묶어야합니다. CSV로 저장할 때 Excel에서 쉼표가 포함 된 셀과 관련됩니다. 이것이 완전히 불가능한 경우, 기술하는 기술을 사용하면 길이가 정확할 때까지 필드를 다시 결합하는 메소드를 호출하여 작업 이름 필드에 여러 쉼표를 처리 할 수 있습니다. –