Q&A

  • 긴 csv 파일을 엔터들어가기전 한라인만 읽는방법...
안녕하세요, 고수님들.

긴 csv 파일을 엔터들어가기전 한라인만 읽는방법 좀 갈쳐 주세요.

While not Eof(ImportFile) do
Begin
         ReadLn(ImportFile,MyRecordString);

......


다음과 같이 했더니, MyRecordString에 파일 전부가 입력 되드라고요.
꼭좀 부탁드리겠습니다. 건겅하세요
6  COMMENTS
  • Profile
    Seung Hun Lee 2002.03.26 15:57
    고수님들, 정말 많은 조언 감사합니다.
    그런데도 애석하게 제가 원하는 답이 아직 없어서 이렇게 한자....

    제가 설명을 잘 못해서 그런가 보네요...

    지금 불러 들일 파일은 일정크기로 필드가 나누어 져 있는것이 아니어서 그냥 잘라서 불러 오기도 애매하고요, 엔터가 있는것은 분명히 확인했구요. 근데도 Reanln은 않먹고, 뭐가 잘못된건지 답답해 죽것네요. 이걸 불러 들려야 다른일을 할수 있는데... 제발이지 고수님 저 한번 살려 주십시요..


    뉴질랜드에서
  • Profile
    이추형 2002.03.25 19:44
    트릭을 쓰자면 RICHEDIT로 파일로드하여 한라인만
    읽으면 어떨까요?

  • Profile
    Seung Hun Lee 2002.03.25 18:06
    고수님, 엔터키가 들어있는걸 확인했는데, 이런 문제가 발생하네요.
    또 다른 답변 부탁드리겠습니다
  • Profile
    윤창준 2002.03.25 21:23
    안녕하십니까?
    저두 초보라
    읽어 올때 문제라면 그건 리턴값(13)이랑 캐리지 값(10)이 모두 들어 있지 않다고 생각됩니다.
    만약 csv 파일을 저장을 프로그램에서 하신다면 writeln으로 하시는지 확인하시구요. 저는 저장 / 불러오기가 아주 잘되 거든요.

    아님 다른 프로그램에서 생성된 데이타를 불어 오시는 것이라면
    readln으로는 되지 않습니다.
    fileStream를 사용하시던가 아님 readrecord(recordread 인지 헤깔리네요)
    를 사용하셔야 하겠네요.

    일정한 크기로 불어오셔서(아님 1byte) 리턴값(13)값인지 체크 하시면서 끝까지 불러오는 수 밖에 없을 것 같습니다.

    각 함수는 찾아보시면 내용이 있을 겁니다.

    그럼 20000.

  • Profile
    김기수 2002.03.25 17:51
    읽어들인 스트링에 라인피드문자나 캐리지 리턴문자가 포함이 안되어 있는것 같습니다.
    원래의 데이타를 확인해 보십시오,

  • Profile
    김영철 2002.03.26 20:58
    현재 윈도우 환경에서 작성한 텍스트파일(csv)은 Readln으로 읽어 들이면
    아무 문제가 없습니다.
    그러나 도스환경에서 작성한 파일들은 그렇지 못한 경우가 있습니다.
    소스 올립니다..

    procedure TFrmMed_Jung.Button1Click(Sender: TObject);
    var
       F: Textfile;
       F_Str : String;
       B_buffer : array[1..101] of char;
       FH1 : integer;
       i_Count : integer;
       i,j : integer;
    begin
       for i := 1 to Sg1.RowCount - 1 do
          for j := 0 to Sg1.ColCount - 1 do
             Sg1.Cells[j,i] := '';
       Sg1.RowCount := 2;
       i := 1;

       {==   특정 길이만큼 읽어서 뿌리기..   ==}
       if OpenDialog1.Execute then   begin
          FH1 := FileOpen(OpenDialog1.FileName, fmShareDenyNone);
          if FH1 <> - 1 then   begin
             i_Count := FileRead(FH1, B_buffer, Sizeof(B_buffer));
             while i_Count <> 0 do
             begin
                Sg1.Cells[0,i] := B_buffer;
                i := i + 1;
                Sg1.RowCount := Sg1.RowCount + 1;
                i_Count := FileRead(FH1, B_buffer, Sizeof(B_buffer));
             end;//while
             if Sg1.RowCount > 2 then
                Sg1.RowCount := Sg1.RowCount - 1;
          end;//if
          FileClose(FH1);
       end;//if

       Find_Psncd;

       {==   한줄씩 있는 데이타 읽기...   ==}
    {   if OpenDialog1.Execute then
       begin
          AssignFile(F, OpenDialog1.FileName);
          Reset(F);
          while not EOF(F) do
          begin
             Readln(F, F_Str);
             Sg1.Cells[0,i] := F_Str;
             i := i + 1;
             Sg1.RowCount := Sg1.RowCount + 1;
          end;//while
          CloseFile(F);
          if Sg1.RowCount > 2 then
             Sg1.RowCount := Sg1.RowCount - 1;
      end;//if
    }
    end;