|
답변 고맙습니다.
이래저래 하다가 결국 엑셀파일을 텍스트 파일로 여는 방법을 선택했어요
fopen사용해서.
그런데 텍스트 파일로 열었는데. 텍스트 파일안에 있는 데이타 진단은 어떻게 해야할지 감이 안잡히네요.
char buffer[250];
File_Name = ExtractFileName(Form3->OpenDialog1->FileName);
File_Path = ExtractFilePath(Form3->OpenDialog1->FileName);
File_Open = File_Path + File_Name;
if((sfp = fopen(File_Open.c_str(),"r")) == NULL) return;
while(!feof(sfp)) {
if(fgets(buffer, sizeof(buffer), sfp) == NULL) break;
여기서
저장된 데이타값들중 깨진문자는 없는지.
if(data1 , data2 깨진문자가 있나요?)
if(data1 > 500 || data2 >800)
{
에러.
}
저장된 값이 max값을 초과하는지 비교하고 싶습니다.
이럴경우 어떻게 텍스트 파일안에 데이타를 건드려야 할지 모르겠네요.
}
이렇게 파일을 열었는데.
현재 텍스트 파일에는 밑에처럼 저장이 되어있습니다.
==========================
버젼 : ver 1.1.0
Date : 07/10/22
hh:mm:ss data1 data2 data3
6:31:53 204 25 2
6:31:55 213 29 2
6:31:57 207 32 2
6:31:59 gdg 32 2
6:32:01 213 12 2
6:32:03 200 43 2
6:32:05 196 43 2
6:32:07 188 45 2
6:32:09 111 44 2
6:32:11 182 46 2
6:32:13 199 dd 2
6:32:15 191 48 2
6:32:17 177 46 2
6:32:19 199 50 2
==========================
이때 버퍼에 들어가는 데이타를 확인해보면 버퍼에 버전 날짜 시간 데이타값이 한꺼번에 다 들어가있거든요.
다시한번 답변 부탁드립니다.
장성호 님이 쓰신 글 :
: 일단 데이타가 시간이 많이 걸리는것은 어쩔수 없을것입니다.
: 그런데 그동안 화면에 버벅거리지 않으려면...
:
: 방법1. for문안에 Application->ProcessMessages()를 넣으세요
:
: bFindStop=false;
: for(int j=5;j<row;j++){
: Form1->edit1->Text = sh.OlePropertyGet("Cells",j,3).OlePropertyGet("Value");
: Form1->graph->DigitCh1 = sh.OlePropertyGet("Cells",j,3).OlePropertyGet("Value");
:
: Application->ProcessMessages(); //이부분에서 다른 윈도우 메세지및 화면처리를 합니다.
:
: if(bFindStop)break;// 검색을 중지하려면 for문을 빠져나옴
:
: }
:
: 방법2. excel을 open하여 data를 검색하는 부분을 쓰레드로만드세요
: 검색 결과만을 메인 쓰레드로 주면 되니까...
:
: 방법3. excel에도 검색기능이 있습니다.
: 저도 해보진 않았지만 ole를 이용해서 excel에 자체 검색 기능을 이용하는것이 더욱좋을것 같습니다.
:
: excel(office2003)로 메크로를 저장해 보니까 아래와 같은것이 ...
: "BorderStyle"은 제가 검색한 text입니다.
:
: Cells.Find(What:="BorderStyle", After:=ActiveCell, LookIn:=xlFormulas, _
: LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
: MatchCase:=False, MatchByte:=False, SearchFormat:=False).Activate
: Cells.FindNext(After:=ActiveCell).Activate //다음검색
: Cells.FindNext(After:=ActiveCell).Activate //다음검색
:
: 방법4. 엑셀에서 각 Cell을 하나하나씩 읽어오는것은 속도가 느립니다.
: 좀더 빠르게 하는 대안으로 ClipBoard를 많이들 이용하지요
: - 엑셀에 내용을 ClipBoard로 copy하고
: - ClipBoard의 내요을 다시 가져와서 그런다음.. 검색한다면.. 빠를듯...
:
:
: 방법3을 잘만들어서 방법2와 조합한다면....더욱 좋을듯...
:
:
: 그럼..
:
:
:
:
: 네버 님이 쓰신 글 :
: : 컴퓨터에 있는 엑셀파일을 열어서 검사하는 부분을 하는데.
: : 엑셀에 row데이타가 17000개 정도 됩니다.
: : 데이타 양이 많아지니까 검사하는데 속도도 오래 걸리고 17000개 정도되면
: : 아예 프로그램이 다운이 되버리더라구요.
: :
: : Form1->ListView1->Items->BeginUpdate();
: : ex.OlePropertyGet("WorkBooks").OleProcedure("Open",File_Open.c_str());
: :
: : Variant awb=ex.OlePropertyGet("ActiveWorkBook");
: : Variant sh=awb.OlePropertyGet("ActiveSheet");//엑티브sheet
: :
: : int row=sh.OlePropertyGet("UsedRange").OlePropertyGet("Rows").OlePropertyGet("Count"); //row갯수
: :
: : for(int j=5;j<row;j++){
: : Form1->edit1->Text = sh.OlePropertyGet("Cells",j,3).OlePropertyGet("Value");
: : Form1->graph->DigitCh1 = sh.OlePropertyGet("Cells",j,3).OlePropertyGet("Value");
: :
: : }
: : Form1->ListView1->Items->EndUpdate();
: : awb.OleProcedure("Close");
: : ex.OleProcedure("Quit");
: :
: : awb=Unassigned;
: : ex=Unassigned;
: :
: : 이렇게 하는데 row값이 17000값이 되면 이게 다운이 되고 그래프에 표기도 안되더라구요.
: : 또한 실행파일을 꺼도 엑셀파일이 계속 살아있구요~
: :
: : 찾아봐도 해결방법을 찾지 못해서 질문드립니다.
: :
: : 해결방법을 찾을수 있는 검색어나 힌트만 주셔도 괜찮습니다. 답변 부탁드려요
|