2013-05-31 2 views
1

MS Access 테이블과 Excel 시트를 .csv 파일로 변환 한 다음 엑셀 시트와 액세스 테이블이 다른 응용 프로그램을 만듭니다. .csv 파일은 괜찮지 만 결과 차이 파일은 html이 들어있는 필드에 오류가 있습니다 (액세스 테이블에는 html로 필드가 있음). 특수 문자가 .csv 파일을 처음 만들 때 이슈가 아니거나 두 파일을 구분하는 방식에 문제가있어서 특수 문자 문제인지 확실하지 않습니다..csv 파일과의 차이 파일 생성

액세스 .csv 파일에서 html이 들어있는 필드가 일부 정보가 한 줄에 모두 표시되는 대신 별도의 줄에 표시되도록 할 수 있습니다. 독자,하지만이 문제를 해결하는 방법을 모르겠습니다. 논리 행 대

string destination = Form2.destination; 
    string path = Path.Combine(destination, "en-US-diff.csv"); 
    string difFile = path; 
    if (File.Exists(difFile)) 
    { 
     File.Delete(difFile); 
    } 
    using (var wtr = new StreamWriter(difFile)) 
    { 
     // Create the IEnumerable data sources 
     string[] access = System.IO.File.ReadAllLines(csvOutputFile); 
     string[] excel = System.IO.File.ReadAllLines(csvOutputFile2); 

     // Create the query 

     IEnumerable<string> differenceQuery = access.Except(excel); 

     // Execute the query 
     foreach (string s in differenceQuery) 
     { 
      wtr.WriteLine(s); 
     }   
    } 
+0

csv는 표 형식의 데이터에 더 적합합니다.이 경우 XML이 더 나은 선택 일 수 있습니다. HTML 코드에 CDATA 필드를 사용할 수 있습니다. – Oscar

+0

행에 키가 필요합니다. 그런 다음 사용자 정의 비교를 작성하고이를 'Except()'에 전달할 수 있습니다. 나는 그것을했고 WOW는 빠릅니다. – Hogan

+0

논리적 줄 대 물리적 줄. 전에도이 문제가있었습니다. 파일을 처음 만들 때 각 논리적 줄 끝에 센티널을 배치하여 문제를 해결했습니다. 시간은 그 특별한 노력에서 짧았고 나는 더 좋은 방법이 있다고 확신합니다. Oscar가 지적한대로 XML CDATA가 선호되는 접근 방식 일 수 있습니다. 그동안 파일 작성 시점을 제어 할 수 있다면 감시 카메라를 고려하십시오. –

답변

1

물리적 라인 :

차이 파일을 생성하는 코드입니다. 한 가지 해결책은 "## || ##"과 같이 구문 분석 프로세스를 혼동하지 않도록 임의의 문자열 토큰 인 센티넬을 사용하는 것입니다. 입력 파일이 생성

는 || ##

### ... 각 라인의 단부에

1,1,1,1,1,1을 센티널 추가 코드로 돌아 가면 System.IO.File.ReadAllLines (csvOutputFile); Environment.Newline 문자열을 센티넬으로 사용합니다. 이것은 당신이 당신의 '액세스'배열의 CSV 라인을해야합니다 그 시점에서

const string sentinel = "##||##"; 
    string myString = File.ReadAllText("myFileName.csv"); 
    string[] access = myString.Split(new string[]{sentinel}, 
           StringSplitOptions.RemoveEmptyEntries); 

... 다음 (의사 코드)로이 문을 교체 할 필요가 당신 '의 모음으로 원하는 방법을 의미 논리적 '라인.

line = line.Replace(Environment.NewLine, String.Empty).Trim(); 

범인을 제거하는 것입니다 ... 당신은 또한 당신의 배열의 각 행에이 명령을 실행해야 할 상황이 더욱 준수하고 당신이 방법을 사용하여 CSV를 구문 분석 할 수 있도록하려면 이미 개발했다. 물론이 문은 원하는 경우 LINQ 식의 IO 문과 결합 될 수 있습니다.

+0

완벽하게 작동합니다. 정말 고마워 –