青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 298  文章 - 377  trackbacks - 0
<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用鏈接

留言簿(34)

隨筆分類

隨筆檔案

文章檔案

相冊

收藏夾

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

c++中輸出和輸入導屏幕和鍵盤的類別聲明包含再標題文件<iostrream.h>中,而磁盤類文件的 I/O則聲明再包含標題文件<fstream.h>內。

輸入和輸出格式:

輸出到磁盤  ofsteam 識別字(“文件名”)

從磁盤讀文件 ifsteam 識別字("文件名“)

例如:

 ofstream outfile("data.txt"); //寫入到磁盤的data.txt中

格式化輸入輸出:

1  整數數據的輸入輸出

整數數據存儲再磁盤內,每個文字各占一個字節。

例如:

#include <fstream.h>

#include <iostream.h>

#inlude <conio.h>

void main()

{

  ofstream outfile("data.txt");  //寫入文件

  for(int i=0;i<10;i++)

   outfile<<i<<" ";    //空格是為了避免數值連接在一起加上去的,此文件大小為20字節

  cout<<"ok,press a key!";

gerch();

程序執行后用記事本打開可以看到數據

0 1 2 3 4 5 6  7 8 9

同樣讀取文件語句為:

int data;

ifstream infile("data.txt");

for(int i=0;i<10;i++)

{

  infile>>data ;  //讀數據的時候因為數據間有一個空格才能完整的讀出,

 cout<<data<<" ";  //輸出到屏幕,加上空格是為了分開數字

}

2 字符數據的輸入

字符的輸出方式以put(ch)為存入語句,讀取語句為get(ch)

例如:

char str[]="hello this is a c++ programe!\n"

                   "i know this difference \n"

                    "and mocive";

ofstream outfile ("data.txt");

for(int i=0;i<strlen(Str);i++)

 outfile.put(str[i]);

讀取:

char ch;

ifstream infile("data.txt");

while(infile)

{

 infile.get(ch);

cout<<ch;

}

 getch();

}

3 字符串數據的輸入

數據多的時候讀寫速度比較快,輸入時以整行字符串加上換行符號一次寫入。讀取的時候以語句getline(buffer,max),來讀取整行數據,直到遇到換行符,每行結尾的\n并不讀入,所以在 輸出的時候需要加上換行符號,否則數據會連接在一起。

例子:

 ofstream outfile("strdata.txt");

outfile<<"use your vote\n";

outfile<<"ouse your weise\n";

讀?。?/font>

const MAX=80;

char buffer[MAX];

ifstream infile("strdata.txt");

while(infile)

{

  infile.getline(buffer,MAX);

 cout<<buffer<<endl;

}                   

4 浮點數

浮點數因為有小數點,在存儲數據時與整數相同,只要每個數據加上一個空格就可以區隔相鄰的數據

6 二進制文件

上述的格式化文件比較占用硬盤控件,采用二進制存儲就可以節約很多控件。它使用write,read()來存儲和讀取。

ofstream 識別字(”文件名“,ios::binary);

write( 寫入地址,寫入大?。?/font>

ifstream  識別字(”文件名“,ios:binary);

識別字.read(讀取地址,讀取大?。?;

例如:infile.read((char*)buffer,sizeof(數據類型));

關閉文件

識別字.close();

例子:

ofstream outfile("data.dat",ios::binary);

for(int i=0;i<100;i++)

{

   n[0]=i+1;

  outfile.write((Char*)n,sizeof(int)); //還可以用變量和數組為例

//  outfile.write((Char*)&i,sizeof(int));  i 為變量

// outfile.write((Char*)n,sizeof(int));  n為數組

}

outfile.close();

ifstream inifile("data.dat",ios:binary);

for(i=0;i<100;i++)

{ inifile.read((Char*)n,sizeof(int);

 cout<<n[0]<<" ";

}

7    隨機存取文件

文件能夠隨意讀出,讀出后又可以更新,更新后可以回存到源文件內。fstream  file ;

file.open("文件名",存取模式);

file.open("x.dat",ios::app|ios::in|ios::out|ios::binary);

in 打開文件輸入或者讀取   ifstream

out 打開文件輸出或者寫入 ofstream

ate 從文件尾開始寫入或者讀取

app 加在文件尾

arunc 若文件存在,講其長度設為0

binary 打開二進制文件

二進制文件中有一個指針,指向當前數據在文件中的位置,這個文件指針和一般的指針變量不一樣,它只是一個純粹的指示器。

函數介紹

seekg()

seekg(0) 指針移到文件的最前面

seekg(0,ios::cur);把當前的指針當作0

seekg(0,ios::end);將指針移到文件尾,若再配合file.tellg()則可以求出文件的大小為多少bytes

以下兩個操作都必須在文件關閉后才可以使用

remove("文件名”);把這個文件刪除

rename("舊文件名","新文件名");

 

#include <iostream> 
#include 
<fstream> 
using namespace std; 
 
int main() 

  
int n[5= {12345}; 
  register 
int i; 
 
  ofstream out(
"test", ios::out | ios::binary); 
  
if(!out) { 
    cout 
<< "Cannot open file.\n"
    return 
1
   } 
 
  out.write((char 
*&n, sizeof n); 
 
  out.close(); 
 
  
for(i = 0; i <5; i++// clear array 
    n[i] 
= 0
 
  ifstream in(
"test", ios::in | ios::binary); 
  
if(!in) { 
    cout 
<< "Cannot open file.\n"
    return 
1
  } 
 
  in.read((char 
*&n, sizeof n); 
 
  
for(i = 0; i <5; i++// show values read from file 
    cout 
<< n[i] << " "
 
  in.close(); 
 
  return 
0
}


posted on 2007-06-14 13:23 聶文龍 閱讀(68668) 評論(2)  編輯 收藏 引用 所屬分類: c++

FeedBack:
# re: ofstream ifstream 文件操作 2007-06-14 13:24 聶文龍
  在C++中,有一個stream這個類,所有的I/O都以這個“流”類為基礎的,包括我們要認識的文件I/O,stream這個類有兩個重要的運算符:

1、插入器(<<)
  向流輸出數據。比如說系統有一個默認的標準輸出流(cout),一般情況下就是指的顯示器,所以,cout<<"Write Stdout"<<'n';就表示把字符串"Write Stdout"和換行字符('n')輸出到標準輸出流。

2、析取器(>>)
  從流中輸入數據。比如說系統有一個默認的標準輸入流(cin),一般情況下就是指的鍵盤,所以,cin>>x;就表示從標準輸入流中讀取一個指定類型(即變量x的類型)的數據。

  在C++中,對文件的操作是通過stream的子類fstream(file stream)來實現的,所以,要用這種方式操作文件,就必須加入頭文件fstream.h。下面就把此類的文件操作過程一一道來。

一、打開文件
  在fstream類中,有一個成員函數open(),就是用來打開文件的,其原型是:

void open(const char* filename,int mode,int access);

參數:

filename:  要打開的文件名
mode:    要打開文件的方式
access:   打開文件的屬性
打開文件的方式在類ios(是所有流式I/O類的基類)中定義,常用的值如下:

ios::app:   以追加的方式打開文件
ios::ate:   文件打開后定位到文件尾,ios:app就包含有此屬性
ios::binary:  以二進制方式打開文件,缺省的方式是文本方式。兩種方式的區別見前文
ios::in:    文件以輸入方式打開
ios::out:   文件以輸出方式打開
ios::nocreate: 不建立文件,所以文件不存在時打開失敗 
ios::noreplace:不覆蓋文件,所以打開文件時如果文件存在失敗
ios::trunc:  如果文件存在,把文件長度設為0
  可以用“或”把以上屬性連接起來,如ios::out|ios::binary

  打開文件的屬性取值是:

0:普通文件,打開訪問
1:只讀文件
2:隱含文件
4:系統文件
  可以用“或”或者“+”把以上屬性連接起來 ,如3或1|2就是以只讀和隱含屬性打開文件。

  例如:以二進制輸入方式打開文件c:config.sys

  fstream file1;
  file1.open("c:config.sys",ios::binary|ios::in,0);

  如果open函數只有文件名一個參數,則是以讀/寫普通文件打開,即:

  file1.open("c:config.sys");<=>file1.open("c:config.sys",ios::in|ios::out,0);

  另外,fstream還有和open()一樣的構造函數,對于上例,在定義的時侯就可以打開文件了:

  fstream file1("c:config.sys");

  特別提出的是,fstream有兩個子類:ifstream(input file stream)和ofstream(outpu file stream),ifstream默認以輸入方式打開文件,而ofstream默認以輸出方式打開文件。

  ifstream file2("c:pdos.def");//以輸入方式打開文件
  ofstream file3("c:x.123");//以輸出方式打開文件

  所以,在實際應用中,根據需要的不同,選擇不同的類來定義:如果想以輸入方式打開,就用ifstream來定義;如果想以輸出方式打開,就用ofstream來定義;如果想以輸入/輸出方式來打開,就用fstream來定義。

二、關閉文件
  打開的文件使用完成后一定要關閉,fstream提供了成員函數close()來完成此操作,如:file1.close();就把file1相連的文件關閉。

三、讀寫文件
  讀寫文件分為文本文件和二進制文件的讀取,對于文本文件的讀取比較簡單,用插入器和析取器就可以了;而對于二進制的讀取就要復雜些,下要就詳細的介紹這兩種方式

  1、文本文件的讀寫
  文本文件的讀寫很簡單:用插入器(<<)向文件輸出;用析取器(>>)從文件輸入。假設file1是以輸入方式打開,file2以輸出打開。示例如下:

  file2<<"I Love You";//向文件寫入字符串"I Love You"
  int i;
  file1>>i;//從文件輸入一個整數值。

  這種方式還有一種簡單的格式化能力,比如可以指定輸出為16進制等等,具體的格式有以下一些

操縱符 功能 輸入/輸出
dec 格式化為十進制數值數據 輸入和輸出
endl 輸出一個換行符并刷新此流 輸出
ends 輸出一個空字符 輸出
hex 格式化為十六進制數值數據 輸入和輸出
oct 格式化為八進制數值數據 輸入和輸出
setpxecision(int p) 設置浮點數的精度位數 輸出

  比如要把123當作十六進制輸出:file1<<hex<<123;要把3.1415926以5位精度輸出:file1<<setpxecision(5)<<3.1415926。

  2、二進制文件的讀寫
①put()
  put()函數向流寫入一個字符,其原型是ofstream &put(char ch),使用也比較簡單,如file1.put('c');就是向流寫一個字符'c'。

②get()
  get()函數比較靈活,有3種常用的重載形式:

  一種就是和put()對應的形式:ifstream &get(char &ch);功能是從流中讀取一個字符,結果保存在引用ch中,如果到文件尾,返回空字符。如file2.get(x);表示從文件中讀取一個字符,并把讀取的字符保存在x中。

  另一種重載形式的原型是: int get();這種形式是從流中返回一個字符,如果到達文件尾,返回EOF,如x=file2.get();和上例功能是一樣的。

  還有一種形式的原型是:ifstream &get(char *buf,int num,char delim='n');這種形式把字符讀入由 buf 指向的數組,直到讀入了 num 個字符或遇到了由 delim 指定的字符,如果沒使用 delim 這個參數,將使用缺省值換行符'n'。例如:

  file2.get(str1,127,'A');//從文件中讀取字符到字符串str1,當遇到字符'A'或讀取了127個字符時終止。

③讀寫數據塊
  要讀寫二進制數據塊,使用成員函數read()和write()成員函數,它們原型如下:

    read(unsigned char *buf,int num);
    write(const unsigned char *buf,int num);

  read()從文件中讀取 num 個字符到 buf 指向的緩存中,如果在還未讀入 num 個字符時就到了文件尾,可以用成員函數 int gcount();來取得實際讀取的字符數;而 write() 從buf 指向的緩存寫 num 個字符到文件中,值得注意的是緩存的類型是 unsigned char *,有時可能需要類型轉換。

例:

    unsigned char str1[]="I Love You";
    int n[5];
    ifstream in("xxx.xxx");
    ofstream out("yyy.yyy");
    out.write(str1,strlen(str1));//把字符串str1全部寫到yyy.yyy中
    in.read((unsigned char*)n,sizeof(n));//從xxx.xxx中讀取指定個整數,注意類型轉換
    in.close();out.close();

四、檢測EOF
  成員函數eof()用來檢測是否到達文件尾,如果到達文件尾返回非0值,否則返回0。原型是int eof();

例:  if(in.eof())ShowMessage("已經到達文件尾!");

五、文件定位
  和C的文件操作方式不同的是,C++ I/O系統管理兩個與一個文件相聯系的指針。一個是讀指針,它說明輸入操作在文件中的位置;另一個是寫指針,它下次寫操作的位置。每次執行輸入或輸出時,相應的指針自動變化。所以,C++的文件定位分為讀位置和寫位置的定位,對應的成員函數是 seekg()和 seekp(),seekg()是設置讀位置,seekp是設置寫位置。它們最通用的形式如下:

    istream &seekg(streamoff offset,seek_dir origin);
    ostream &seekp(streamoff offset,seek_dir origin);

  streamoff定義于 iostream.h 中,定義有偏移量 offset 所能取得的最大值,seek_dir 表示移動的基準位置,是一個有以下值的枚舉:

ios::beg:  文件開頭
ios::cur:  文件當前位置
ios::end:  文件結尾
  這兩個函數一般用于二進制文件,因為文本文件會因為系統對字符的解釋而可能與預想的值不同。

例:

     file1.seekg(1234,ios::cur);//把文件的讀指針從當前位置向后移1234個字節
     file2.seekp(1234,ios::beg);//把文件的寫指針從文件開頭向后移1234個字節
  回復  更多評論
  
# re: ofstream ifstream 文件操作 2007-06-14 22:56 聶文龍
C++ 中關于文件的讀入和輸出。
Example : 從in.txt 文件中讀入數據,并輸出到out.txt中,輸出的文件中每行之間有一空行相隔



#include
#include
#include
using namespace std;
int main (int){

string s;

ifstream inf;
inf.open("in.txt");

//打開輸出文件
ofstream outf;
outf.open("out.txt");


//從in.txt 文件中讀入數據,并輸出到out.txt中
/*其中 getline(參1,參2); 作用是從 inf 指向的文件中
每次讀入一行,把數據存到字符串s 中,從第一行開始
 每讀完一行后,系統自動地把指針指向下一行,不用人為
 干預*/
while( getline(inf,s ) ){
outf << s << '\n\n'; //我這里并沒有用到字符串
cout << s << endl << endl; //數組,而是只用了一個串
} //S,是因為我每次讀入一行
//后,立即就把它輸出到


//out.txt中,跟著讀下一行

inf.close();
outf.close();
return 0;
}

========================================方法二============================================

#include
#include
#include
#include
using namespace std;
int main (int){



ifstream inf;
inf.open("in.txt");


ofstream outf;
outf.open("out.txt");

/*這道題有許多解法的,重要的要了它文件輸入輸出的原理
 你可以一行行地讀入,也可以一個字一個字地讀入,或一個詞
 一個詞地讀入,整型或浮點型讀入,看你定義的是哪種數據類型*/

char c;
inf >> noskipws; //不忽略空白,把每行最后那個'\n'
//也讀進來。
while(inf >>c)
{
if (c == '\n'){ //遇到 '\n' 回車、換行。
outf << "\n\n"; //輸出到文件
cout << "\n\n"; //輸出到屏幕
}

else{
outf << c; //輸出到文件
cout << c; //輸出到屏幕
}
}
/* 同樣的原理,從文件中讀入單個字符,每次讀入一個后,
  系統自動地把指針指向下一個字,而不用你指定這次讀哪個,
下次讀哪個,除非你不想從第一個開始讀,比如說:我想從
第100個字開始讀,或者我想讀最后50個字。這就需要調用
相應的函數,并指定相應的位置。*/


inf.close();
outf.close();
return 0;
}





主  題: 請問VC++中,怎么實現讀取.txt文件時的行定位,就是讀取指定的行的內容.





請問VC++中,怎么實現讀取.txt文件時的行定位,就是讀取指定的行的內容.





?
一行一行的讀到你想要的那行。
CStdioFile的ReadString()方法是讀一行。


[VC] 文件對話框讀寫文本文件
2005年 01月23日
文件對話框讀寫文本文件/*************************************************
* 讀文本文件
**************************************************/
//顯示文件打開對話框
CFileDialog dlg(TRUE, "SQL", "*.txt",OFN_HIDEREADONLY
|OFN_OVERWRITEPROMPT,"Text Files(*.txt)|*.txt|SQL Files(*.sql)|*.sql|All Files(*.*)|*.*||");
if ( dlg.DoModal()!=IDOK ) return;
//獲取文件的絕對路徑
CString sFileName=dlg.GetPathName();
//打開文件
CStdioFile out;
out.Open(sFileName, CFile::modeRead);
CString sSql="",s;
//讀取文件
do{
out.ReadString(s);
sSql=sSql+s+"\r\n";
}while ( out.GetPosition()out.Close();
//AfxMessageBox(sSql);


/*************************************************
* 寫文本文件
**************************************************/
//顯示文件保存對話框
CFileDialog dlg(FALSE, "SQL", "*.txt",OFN_HIDEREADONLY
| OFN_OVERWRITEPROMPT,"Text Files(*.txt)|*.txt|SQL Files(*.sql)|*.sql|All Files(*.*)|*.*||");
if ( dlg.DoModal()!=IDOK ) return;
//獲取文件的絕對路徑
CString sFileName=dlg.GetPathName();
CStdioFile out;
//打開文件
out.Open(sFileName, CFile::modeCreate | CFile::modeWrite);
//保存文件
CString sSql="文本文件內容";
out.WriteString(sSql);
out.Close();
我要讀一個文件,但是我想讓一行一行的讀,而且每行有不一定長度的,應該怎么做呢?
(cqwally發表于2001-8-9 23:37:43)

1)
程序如下:
{

.....................
CStdioFile file;
CString str;
file.Open("test.txt",CFile::modeRead,NULL);
file.ReadString(str);
MessageBox(str);//第一行
file.ReadString(str);
MessageBox(str);//第二行
.....................
}



看看兩次顯示的有什么不同。test.txt文件如下:
第一行
第二行


2)
我用CFile::Write,怎樣才可以寫入回車,空格?而且我要寫兩欄要對齊?
回車換行:"\r\n"

如何正確的使用CFile::Open中的參數?
(taxiblackangel發表于2001-8-14 10:58:16)

[問題提出]
我設計了一個從記事本中讀數據的程序。將數據顯示在視中。
代碼如下:

void CTry1View::OnShow()
{
// TODO: Add your command handler code here
CStdioFile file;

CString filename;
CFileDialog opendlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,".(*.txt)|*.txt|All Files(*.*)|*.*||",NULL);
if(opendlg.DoModal()==IDOK)
filename=opendlg.GetPathName();
if(file.Open(filename,CFile::modeCreate|CFile::modeReadWrite|CFile::typeText)==0)
{

AfxMessageBox("error");
return;
}

while(file.ReadString(string))
{
strList.AddTail(string);
string.ReleaseBuffer();
}

flag=true;
Invalidate();
}
結果不但在視中沒有任何顯示,而且記事本中的數據也全部丟失。變成了一片空白。真是搞不懂了。
記事本中的數據是我隨便寫的。如下:
11
222
3333
44444
.......

[解決方法]
在file.Open(filename,CFile::modeCreate|CFile::modeReadWrite|CFile::typeText)中,CFile::modeCreate去掉,modeCreate的意思是沒有此文件就建立,有了此文件,清空文件.


最新評論 [發表評論] 查看所有評論 推薦給好友 打印

最好是這樣file.Open(filename,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite|CFile::typeText),因為CFile::modeNoTruncate意思是文件即使存在也不清空。 ( lichihang 發表于 2003-12-29 8:33:00)

如何使用CStdioFile::ReadString來讀文件?
(yello2000i發表于2001-8-16 17:04:39)

[問題提出]
一數據文件一行一條記錄,我用file.readstring()一次讀一行,并對讀取的數據做一些處理;
請問:while(文件還沒到結尾)
{
file.readstring();
...
}
??文件還沒到結尾如何判斷?
如果,到了指定位置不讀了,過一會兒再讀又如何做?
[解決方法]
while()中不用另加判斷條件了,因為CStdioFile::ReadString()本身就是判斷標志,若沒有了(文件到頭)返回NULL,因此:while(file.ReadString(s)){}就可.
[程序實現]
假設你已有了名為ts.txt的文件在你的工程目錄下:
{
CStdioFile file;
CString sss;
char ccc[100];
DWORD o=0;
int ol=0;
file.Open("ts.txt",CFile::modeRead);
while(file.ReadString(sss))
{
ol++;
if(ol>1)//讀兩次就不讀了.
break;

}
o=file.GetPosition();//記錄上次的結果(讀到哪了)
.................
file.Seek(o,0);//接著上回讀
while(file.ReadString(sss))
{
strcpy(ccc,sss);
AfxMessageBox(ccc);
}
}




這樣的命名叫人看了好難受的 又是o
又是0
我 覺得要測試的 字符就是"\n, \r, \r\n, or EOF. "
就可以了
( wshust 發表于 2004-3-4 21:28:00)

上面lichihang,我試了一下,事實并不是如你所說的那樣讀到空行就停了,而是一直讀下去呀??! ( pamir 發表于 2004-2-9 8:31:00)

我不同意這個回答!
因為CStdioFile::ReadString()返回NULL的條件是遇到文件尾或者一個空行,所以如果說txt文件的某一條記錄后面連續出現了若干條空行,那么CStdioFile::ReadString()函數也會返回NULL,這樣文件并沒有讀取完畢! ( lichihang 發表于 2003-12-29 8:26:00)


刪除目錄及目錄下所有文件與子目錄
(Hermess發表于2002-5-24 22:10:27)

  VC++只提供了刪除一個空目錄的函數,而在實際應用中往往希望刪除其下有很多子目錄與文件的目錄。為了實現這一功能,我編寫了DeleteDirectory 函數,它可以實現這一功能。

函數原型:BOOL DeleteDirectory(char *DirName);
返回值:成功刪除時返回TRUE,否則返回FALSE
參數DirName為要刪除的目錄名,必須為絕對路徑名,如“c:\\temp"。

函數定義如下:
BOOL DeleteDirectory(char *DirName)
{
CFileFind tempFind;
char tempFileFind[200];
sprintf(tempFileFind,"%s\\*.*",DirName);
BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileFind);
while(IsFinded)
{
IsFinded=(BOOL)tempFind.FindNextFile();
if(!tempFind.IsDots())
{
char foundFileName[200];
strcpy(foundFileName,tempFind.GetFileName().GetBuffer(200));
if(tempFind.IsDirectory())
{
char tempDir[200];
sprintf(tempDir,"%s\\%s",DirName,foundFileName);
DeleteDirectory(tempDir);
}
else
{
char tempFileName[200];
sprintf(tempFileName,"%s\\%s",DirName,foundFileName);
DeleteFile(tempFileName);
}
}
}
tempFind.Close();
if(!RemovwDirctory(DirName))
{
MessageBox(0,"刪除目錄失??!","警告信息",MK_OK);
return FALSE;
}
return TRUE;
}
搜集--- 關于“按行讀取”“查找特定字符串”“替換字符串”操作
氣死了,剛剛誤操作,畫了一半的表格全都沒了。哼哼,沒有好興致說些有趣的話了,愛看不看,愛聽不聽。氣死了!偏偏還要在網頁上寫,還要不保存!

不說上午的事情了,

直奔主題氣死!

關鍵詞:文本文件 按行讀取 查找特定字符串 替換字符串

C/C++ VC/MFC

按行:fgets();getline(); StdioFile::ReadString(buf)CArchive::ReadString(CString &str)

查找:strstr();_tcschr();fseek() buf.Find(str)(buf是CString類型的)

替換:替換字符串

代碼:

CStringFile CLASS


我用fopen打開一個txt文件,想查找某一字符串,找到這個字符串后,再讀取它對應行的

其他數據,請教大俠指點小弟如何去做,用什么函數。謝謝。



a. fopen過后,逐行讀入str, 用 strstr 判斷是否含有特定字符串. 例子:

FILE *fd=fopen("你要打開的文件","r+");

char tmpLine[200];

while(fgets(tmpLine,200,fd)!=NULL)

{

if( strstr(tmpLine,"你要找的字符串"))

{

printf("find the string!\n");

break;

}

memset(tmpLine,0,200);

}

free(tmpLine);



//從指定文件中提取指定字符串

CStrOP& CStrOP::GetSpecifyString(LPCTSTR szSpec, CArchive *ar, BOOL bMid, int iMid, int *pRow, int *pCol)

{

do

{

//讀取文件內容

if(ar)

{

//判斷是否到了文件最末

if(!ar->ReadString(*this))

{

//未找到找到字符串

if(pRow)

{

*pRow = 0;

}

if(pCol)

{

*pCol = 0;

}

(*this).Format("%s", "");

break;

}

}

//獲得需要查找的字符串所在行

if(pRow)

{

(*pRow)++;

}

//去掉空白字符

TrimLeft();

TrimRight();

//判斷是否已經找到需要的字串

if(Find(szSpec) >= 0)

{

//獲得需要查找的字符串所在列

if(pCol)

{

*pCol = Find(szSpec) + 1;

}

//判斷是否需要提取字符串

if(bMid)

{

//判斷提取字符串的規則,如果iMid為-1,則不論字串在任何位置,都可以

//進行提?。环駝t,字串必須在指定位置iMid時才可以提取

if(iMid == -1)

{

(*this).Format("%s", Mid(Find(szSpec) + lstrlen(szSpec)));

break;

}

else if(iMid >= 0)

{

if(Find(szSpec) == iMid)

{

(*this).Format("%s", Mid(iMid + lstrlen(szSpec)));

break;

}

}

}

}

else

{

if(!ar)

{

//未找到找到字符串

if(pRow)

{

*pRow = 0;

}

if(pCol)

{

*pCol = 0;

}

(*this).Format("%s", "");

break;

}

}

} while(1);



return *this;

}

其中CStrOP是我新建的類,函數聲明為

CStrOP& GetSpecifyString(LPCTSTR szSpec, CArchive *ar = NULL, BOOL bMid = TRUE, int iMid = 0, int* pRow = NULL, int* pCol = NULL);

這個函數能實現在指定文本格式的文件中進行特定字符串的查找、提取、定位等工作,其中參數CArchive ar初始化為:

CFile file(cMyTxtFile,CFile::modeRead)

CArchive ar(&file, CArchive::load)

  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              欧美久久成人| 欧美—级a级欧美特级ar全黄| 亚洲性图久久| 欧美国产综合视频| 伊人男人综合视频网| 先锋影音国产精品| 亚洲久久在线| 欧美高清成人| 亚洲精品网址在线观看| 欧美激情一二三区| 久久久久久尹人网香蕉| 国产日韩欧美日韩大片| 亚欧美中日韩视频| 午夜视频久久久久久| 国产九区一区在线| 欧美一区二区黄色| 亚洲欧美中日韩| 国产日韩欧美三区| 久久久久免费观看| 久久久之久亚州精品露出| 在线观看欧美亚洲| 亚洲第一网站| 另类激情亚洲| 日韩一级精品视频在线观看| 91久久中文字幕| 国产精品国色综合久久| 亚洲欧美日韩精品久久| 亚洲欧美大片| 国内外成人免费视频| 美女日韩在线中文字幕| 欧美成人免费全部观看天天性色| 亚洲日本久久| 日韩午夜激情| 国产欧美在线看| 美国成人毛片| 欧美好骚综合网| 亚洲男人av电影| 欧美中文字幕视频在线观看| ●精品国产综合乱码久久久久| 欧美成人三级在线| 欧美日韩性生活视频| 久久精品国产综合精品| 免费中文字幕日韩欧美| 亚洲综合精品一区二区| 久久精品官网| 中国亚洲黄色| 久久se精品一区二区| 一区二区免费在线播放| 午夜精品久久久久久久99水蜜桃| 亚洲国产成人av在线| 亚洲免费高清视频| 永久域名在线精品| 亚洲一区中文字幕在线观看| 影音国产精品| 亚洲一区999| 亚洲精品中文字幕在线观看| 欧美一级一区| 欧美另类专区| 国产精品萝li| 欧美二区不卡| 国产九区一区在线| 亚洲毛片一区二区| 在线免费观看视频一区| 亚洲淫片在线视频| 91久久久国产精品| 先锋影音国产精品| 亚洲一区免费视频| 欧美久久影院| 欧美国产一区二区三区激情无套| 国产欧美日韩视频一区二区三区| 亚洲精品久久久久久久久| 在线观看国产成人av片| 欧美一区二区在线免费播放| 亚洲欧美日韩国产另类专区| 欧美日韩免费在线视频| 亚洲福利免费| 亚洲国产专区| 美女视频网站黄色亚洲| 久久精品一二三| 国产欧美韩日| 亚洲欧美视频在线观看视频| 亚洲午夜精品一区二区| 欧美视频网站| 日韩午夜剧场| 这里只有精品在线播放| 欧美激情导航| 亚洲黄色在线看| 亚洲精品护士| 欧美电影在线播放| 亚洲国产导航| 日韩午夜精品| 久久免费高清视频| 免费一级欧美片在线观看| 尤物yw午夜国产精品视频| 久久久91精品国产| 校园春色综合网| 国产三级精品三级| 久久精品国产欧美亚洲人人爽| 欧美在线播放一区| 欧美婷婷久久| 亚洲一区二区三区四区五区午夜| 亚洲影音一区| 欧美性猛交xxxx免费看久久久 | 亚洲日韩视频| 亚洲精品一区在线| 欧美大片免费观看在线观看网站推荐| 麻豆精品在线观看| 亚洲品质自拍| 欧美久久影院| 亚洲一区三区电影在线观看| 欧美一区1区三区3区公司| 国产精品美女午夜av| 亚洲一区二区三区免费观看| 久久久91精品| 亚洲第一精品夜夜躁人人爽| 欧美激情第8页| av不卡在线观看| 久久久久**毛片大全| 136国产福利精品导航网址| 欧美成人在线网站| 欧美激情免费在线| 制服丝袜激情欧洲亚洲| 国产性做久久久久久| 玖玖在线精品| 日韩视频免费看| 国产精品一区二区久久国产| 久久这里只有精品视频首页| 亚洲大胆视频| 欧美日韩在线三区| 欧美一区二区三区播放老司机| 免费看亚洲片| 亚洲一区黄色| 亚洲国产一区二区a毛片| 欧美午夜片在线免费观看| 欧美一级视频免费在线观看| 亚洲欧洲一区二区在线播放| 亚洲欧美久久久久一区二区三区| 国产主播精品| 欧美片在线观看| 久久久久一区二区三区| 中文在线一区| 欧美凹凸一区二区三区视频| aⅴ色国产欧美| 黑人极品videos精品欧美裸| 欧美日韩在线视频一区| 久久视频一区| 欧美在线视频一区| 宅男66日本亚洲欧美视频| 欧美激情第10页| 久久天堂av综合合色| 亚洲欧美国产毛片在线| 亚洲欧洲精品一区| 国内欧美视频一区二区| 欧美日韩综合久久| 欧美不卡一卡二卡免费版| 久久久精品免费视频| 亚洲欧美国产另类| 99这里只有精品| 伊人婷婷欧美激情| 国产伦精品一区二区三区照片91 | 国产日韩高清一区二区三区在线| 免费在线视频一区| 欧美一区综合| 亚洲香蕉在线观看| 夜夜嗨av一区二区三区免费区| 亚洲电影成人| 欧美成人视屏| 欧美黄色精品| 欧美成人精品在线| 欧美电影资源| 欧美成人高清| 欧美第十八页| 欧美激情国产精品| 欧美激情第4页| 欧美777四色影视在线| 久久精品国产99精品国产亚洲性色 | 最新成人av在线| 亚洲国产一区在线| 最新精品在线| 在线观看国产精品网站| 国产一区二区精品久久99| 国产精品国产一区二区| 国产精品久久久对白| 欧美午夜性色大片在线观看| 欧美午夜不卡视频| 国产精品美女久久久久aⅴ国产馆| 国产精品成人aaaaa网站| 国产精品国产三级国产专播精品人 | 亚洲美女黄色片| 亚洲日本中文| 日韩亚洲欧美综合| 亚洲丝袜av一区| 午夜精品久久久久久99热| 久久精品成人| 久久免费视频观看| 欧美黄色日本| 日韩视频永久免费观看| 亚洲综合二区| 久久久国产精品一区二区三区| 免费一级欧美片在线播放|