請問有關於從多個文字檔中抽取部分字母到一個文字檔的問題 |
尚未結案
|
Saladin
一般會員 發表:18 回覆:9 積分:5 註冊:2005-01-19 發送簡訊給我 |
void __fastcall TFormPre::N_selectClick(TObject *Sender)
{
//程式目的:將多個檔案的序列與結構提出來存成一個檔
ctime=1;
Memo1->Clear();
Memo2->Clear();
MemoText->Clear();
int size=10000;
int len;
int pos=0;
int pos2=0;
char c;
char*temp=new char[size];
int memoLength;
char*outstring;
FILE *train;
FILE *train2;
FILE *stream;
// char FirstLine[512];
char* aastring;
OpenDialog1->Options.Clear();
OpenDialog1->Options << ofAllowMultiSelect << ofFileMustExist;
OpenDialog1->Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
OpenDialog1->FilterIndex = 2; // start the dialog showing all files
if (OpenDialog1->Execute())
{
for (int I = 0; I < OpenDialog1->Files->Count; I )
{
//FILE *stream;
stream = fopen(OpenDialog1->Files->Strings[I].c_str(), "r"); if (stream)
{
pos=0;
pos2=0;//
// read the first line from the file
//多重選擇
//=============================================================//
fclose(stream);
Memo1->Clear();
Memo1->Lines->LoadFromFile(OpenDialog1->Files->Strings[I].c_str());
len=Memo1->GetTextLen();
aastring=Memo1->Lines->Text.c_str();
aastring[len]='\0';
c=aastring[pos];
while(c!=':')
{
pos ;
c=aastring[pos];
}
pos ;
c=aastring[pos];
while(c!='\r'&&c!='\n')
{
temp[pos2 ]=c;
c=aastring[ pos];
}
temp[pos2 ]='\r';
temp[pos2 ]='\n';
while(c=='\r'||c=='\n')
{
c=aastring[ pos];
}
while(aastring[pos]!='d'||aastring[pos 1]!='s'||aastring[pos 2]!='s'||aastring[pos 3]!='p'||aastring[pos 4]!=':')
{
pos ;
}
pos =5;
c=aastring[pos];
while(c!='\r'&&c!='\n')
{
temp[pos2 ]=c;
c=aastring[ pos];
}
delete aastring;
temp[pos2 ]='\r';
temp[pos2 ]='\n';
temp[pos2]='\0';
Memo2->Clear();
Memo2->SetTextBuf(temp);
delete temp;
memoLength=Memo2->GetTextLen();
outstring=new char[memoLength];
Memo2->GetTextBuf (outstring,memoLength);
//outstring[memoLength]='\0';
if(ctime==1)//尚未建檔
{
//FILE *train;
train=fopen("training_data.txt","wb");
fputs(outstring,train);
fclose(train);
ctime ;
//delete outstring;
}
else//已建檔
{
//FILE *train2;
train2=fopen("training_data.txt","a ");
fputs(outstring,train2);
fclose(train2);
//delete outstring;
}
MemoText->Lines->LoadFromFile("training_data.txt");
}
}
} } 這個程式的目的只是將多個檔案中第一列的:的右邊所有字母
及列中有dssp:後面的所有字母都寫在train_data.txt檔
其中ctime為全域變數,用來判斷是否已經建了這個train_data.txt檔
但是總會遇到錯誤訊息"Access violation at 0042052"(後面的數字為比方),在下程式功力弱,
希望各位前輩能指點一二 也希望前輩能指導要如何在一個函式結束後
刪除宣告在裡面的string變數(如string astring;要如何刪除astring)
謝謝
如有不禮貌之處請海涵
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
justdo
高階會員 發表:2 回覆:359 積分:222 註冊:2004-08-17 發送簡訊給我 |
aastring=Memo1->Lines->Text.c_str(); aastring[len]='\0';AnsiString 用 c_str()取回的指標最好不要去修改其內容 上面第二行程式是相當危險的寫法,也沒有必要 再者,你的讀取方式並沒有考慮":"是不是在開頭 也沒有檢查是不是把整個字串讀完了 既然要檢查開頭,你應該取出Memo1的每一行,來檢查 這樣也可以避免不知道結尾在哪裡,而一直讀下去 for (int i=0; i |
Saladin
一般會員 發表:18 回覆:9 積分:5 註冊:2005-01-19 發送簡訊給我 |
void __fastcall TFormPre::N_selectClick(TObject *Sender) { //程式目的:將多個檔案的序列與結構提出來存成一個檔 ctime=1; Memo1->Clear(); Memo2->Clear(); MemoText->Clear(); int size=10000; int len; int pos=0; int pos2=0; char c; char*temp=new char[size]; int memoLength; char*outstring; FILE *train; FILE *train2; FILE *stream; int i; int j; // char FirstLine[512]; //char* aastring; OpenDialog1->Options.Clear(); OpenDialog1->Options << ofAllowMultiSelect << ofFileMustExist; OpenDialog1->Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*"; OpenDialog1->FilterIndex = 2; // start the dialog showing all files int a=0; if (OpenDialog1->Execute()) { for (int I = 0; I < OpenDialog1->Files->Count; I ++) { //FILE *stream; stream = fopen(OpenDialog1->Files->Strings[I].c_str(), "r"); if (stream) { pos=0; pos2=0;// // read the first line from the file //多重選擇 //=============================================================// fclose(stream); Memo1->Clear(); Memo1->Lines->LoadFromFile(OpenDialog1->Files->Strings[I].c_str()); for (i=0; i我把程式略為修改後 結果會出現錯誤訊息如下 除錯時除錯到此行: while(p[j++]!=':'){}就會出現上面的錯誤 總覺得自己好像有很多概念沒搞懂~ 如果跟別人說自己是資工系的大概會沒人信吧~ 不過我會盡我所能學習的 請各位前輩賜教 謝謝 |
GeorgeKu
中階會員 發表:1 回覆:120 積分:74 註冊:2004-10-13 發送簡訊給我 |
|
Saladin
一般會員 發表:18 回覆:9 積分:5 註冊:2005-01-19 發送簡訊給我 |
好像不是這個問題
我讀取的個別檔案是下面的樣式
seq_1acx:APAFSVSPASGASDGQSVSVSVAAAGETYYIAQCAPVGGQDACNPATATSFTTDASGAASFSFTVRKSYAGQTPSGTPVGSVDCATDACNLGAGNSGLNLGHVALTFG seq_MACM_STRMA:APGVTVTPATGLSNGQTVTVSATTPGTVYHVGQCAVVEGVIGCDATTSTDVTADAAGKITAQLKVHSSFQAVVANGTPWGTVNCKVVSCSAGLGSDSGEGAAQAITFA seq_KEDA_ACTSL:SAAVSVSPATGLADGATVTVSASATSTSATALQCAILAGRGACNVAEFHDFSLSG.GEGTTSVVVRRSFTGYVPDGPEVGAVDCDTAPCEIVVGGNTGEYGNAAISFG seq_NCZS_STRCZ:APTATVTPSSGLSDGTVVKVAGAQAGTAYDVGQCAWVDGVLACNPADFSSVTADANGSASTSLTVRRSFEGFLFDGTRWGTVDCTTAACQVGLSDAAGNGPGVAISFN OrigSeq:APAFSVSPASGASDGQSVSVSVAAAGETYYIAQCAPVGGQDACNPATATSFTTDASGAASFSFTVRKSYAGQTPSGTPVGSVDCATDACNLGAGNSGLNLGHVALTFG cons:---EEEE---------EEEEEEE----EEEEEEEEEEE-----------EEEE-----EEEEEEEEEEEEEEE------EEE------EEEEE---------EEEEE- dsc:---EEEEEE-------EEEEEEE----EEEEEEEEEEEE---------EEEEEE-----EEEEEEEEEEEEEE------EEEEEEEEEEEEEE--------EEEEE-- mul:----------------EEEEEE-----EEEEEEEEEEE-----------------------EEEE----------------E------E------------------- nnssp:--EEEEE---------EEEEEE-----EEEEEEE---------------EEEE-----EEEEEEEE------------------------------------EEEEE- phd:---EEEE---------EEEEEEE---EEEEEEEEEEEE-E---------EEEE-----EEEEEEEEEEEEEEE-----EEEE------EEEEE---------EEEEE- pred:----------------EEEEEE-----EEEEE---------------------------EEEEEEEE----------------------------------------- zpred:-EEEEEEE------EEEEEEEE-----EEEEEEEEEEE----EEE--EEEEE--------EEEEEEE------------EEEEEEEEEEEEEE---------EEEEEE access:EEEBEBBEBEE-EEE-BBBBBBBBEEEBBBBBEBBBBEBBBBBEBBEBBEBBBEBEEEBBBEBEB-EBBEBBB-EEEE-BBBEBBBBBBEBBBBEEBEEBBBBBBBBE PHD:994466324555787289999844862557767888722021135232134331353123899998743666259981223512333224111267776651677759 Pred:008888899999999089996667695558555667889989999877766770999605856995566667899998777687889977777999998888677000 dssp:--EEEEE---------EEEEEEE----EEEEEEE-EE--EE--------EEE-------EEEEE---EEEEE-----EEEEEE------EEEEE-------------- define:EEEEE----------EEEEEEE---------EEEEE---EEEEE------EEEEEE--EEEEEEE---EEEEE---EEEEEEE------EEEE------EEEEEEEEE stride:--EEEEE---------EEEEEEE---EEEEEEEEEEE--EEEE-----EEEEE------EEEEE---EEEEE-----EEEEEE------EEEEE-------EE-----而我在跑那一行有問題的程式碼時 只執行一次就出現問題 |
GeorgeKu
中階會員 發表:1 回覆:120 積分:74 註冊:2004-10-13 發送簡訊給我 |
|
Saladin
一般會員 發表:18 回覆:9 積分:5 註冊:2005-01-19 發送簡訊給我 |
//程式目的:將多個檔案的序列與結構提出來存成一個檔 ctime=1; Memo1->Clear(); Memo2->Clear(); MemoText->Clear(); int size=10000; int len; int pos=0; int pos2=0; char c; char*temp=new char[size]; int memoLength; char*outstring; FILE *train=fopen("traintemp.txt","w"); FILE *stream; int i; int j; // char FirstLine[512]; //char* aastring; OpenDialog1->Options.Clear(); OpenDialog1->Options << ofAllowMultiSelect << ofFileMustExist; OpenDialog1->Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*"; OpenDialog1->FilterIndex = 2; // start the dialog showing all files int a=0; if (OpenDialog1->Execute()) { for (int I = 0; I < OpenDialog1->Files->Count; I ++) { //FILE *stream; stream = fopen(OpenDialog1->Files->Strings[I].c_str(), "r"); if (stream) { pos=0; pos2=0;// // read the first line from the file //多重選擇 //=============================================================// fclose(stream); Memo1->Clear(); Memo1->Lines->LoadFromFile(OpenDialog1->Files->Strings[I].c_str()); for (i=0; i<=Memo1->Lines->Count;i++) { AnsiString p=Memo1->Lines->Strings[i]; if (!p.IsEmpty()) { if(i==0) { j=1; while(p[j++]!=':'){} j++; while(j<=p.Length()) { fputc(p[j++],train); } }//if(i==0) else { if (p[1]=='d'&&p[2]=='s'&&p[3]=='s'&&p[4]=='p'&&p[5]==':') { j=6; while(j<=p.Length()) { fputc(p[j++],train); } } }//else }//if (!p.IsEmpty()) } } } } fclose(train); Memo1->Lines->LoadFromFile("traintemp.txt");程式改成以上的樣式 但發生以下的問題 即使除錯我也不知道問題出在哪裡 請教前輩該怎麼辦 |
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
Saladin 您好: 看起來您的 traintemp.txt 檔案與透過 OpenDialog 所選擇的檔案是分別存放於不同的目錄,因此才會產生錯誤,您可以在處理 traintemp.txt 檔案時的動作時,在檔名前方都加上路徑,例如:C:\\mydir\\traintemp.txt 就應該不會有 "Cannot open file..." 的錯誤了,或者在處理其它與檔案有關的動作前前記錄下當前目錄位置,然後再處理完其它動作後,再切換回該目錄亦可,例如:
.... 前略 .... AnsiString oldDir = GetCurrentDir(); if (OpenDialog1->Execute()) { .... 略 .... } fclose(train); SetCurrentDir(oldDir); Memo1->Lines->LoadFromFile("traintemp.txt");7 天天敲鍵盤 v 時時按滑鼠 8 |
Saladin
一般會員 發表:18 回覆:9 積分:5 註冊:2005-01-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |