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

zhonghua

C++博客 首頁 新隨筆 聯(lián)系 聚合 管理
  72 Posts :: 1 Stories :: 4 Comments :: 0 Trackbacks

雖然C++標(biāo)準(zhǔn)中有了文件讀取的相關(guān)類,也很好用,但是在涉及到QT編程的時(shí)候卻用起來不方便了,因?yàn)镼T本身很多組件都是關(guān)聯(lián)的自身的 QString類型的字符串,所以再用C++本身String類型的時(shí)候就不是那么方便了,需要進(jìn)行轉(zhuǎn)化,這樣給程序帶來了復(fù)雜度,同時(shí)也帶來了轉(zhuǎn)化的開銷,所以如果用QT開發(fā),可以就用它本身所帶的這些類型進(jìn)行處理,形成一個(gè)系統(tǒng),便于數(shù)據(jù)在程序之中的交互和共用。
   QT很好,但是在處理中文或者其他語言的時(shí)候要注意編碼格式,如果沒有注意,讀取文件的時(shí)候可能讀出來的就是亂碼或者干脆程序就死掉了,這是我們所不愿意看到的,下面就講講怎么樣通過QT的類來讀取中文文件。

介紹部分
   我們需要用到幾個(gè)頭文件中的類:
#include <qstring.h>
#include <qfile.h>
#include <qtextstream.h>
#include <qtextcodec.h>


QString

QString類提供了一個(gè)Unicode文本和經(jīng)典的C以零結(jié)尾的字符數(shù)組的抽象。
QString使用隱含共享,這使它非常有效率并且很容易使用。
所有的QString的方法都使用const char *參數(shù),const char *被解釋為經(jīng)典的C風(fēng)格的以零結(jié)尾的ASCII字符串。所以const char *參數(shù)為0是合法的。如果const char *不是以零結(jié)尾的,結(jié)果是不確定的。把經(jīng)典的C字符串復(fù)制到QString的函數(shù)將不會(huì)復(fù)制結(jié)尾的0字符。QString的QChar數(shù)組(可以通過 unicode()返回)通常不以零結(jié)尾。如果你需要把QString傳遞到一個(gè)需要C的以零結(jié)尾的字符串,請使用latin1()。
沒有分配任何東西的QString是零,也就是長度和數(shù)據(jù)指針都為0。引用空字符串(“”,一個(gè)單一的'\0'字符)的QString是空。零和空這兩個(gè) QString在方法中都是合法的。把(const char *) 0賦值給QString給定了一個(gè)零QString。為了方便,QString::null是一個(gè)零QString。當(dāng)排序的時(shí)候,空字符串在最前面,然后是非空字符串,然后才是零字符串。我們建議使用if ( !str.isNull() ),而不是if ( !str )來檢測非零字符串,關(guān)于解釋說明也可以參考o(jì)perator!()。
注意如果你發(fā)現(xiàn)你正在混合使用QCString、QString和 QByteArray,這將會(huì)導(dǎo)致很多不必要的復(fù)制并且也許會(huì)預(yù)示著你正在處理的真實(shí)自然數(shù)據(jù)是不確定的。如果數(shù)據(jù)是以零結(jié)尾的八位數(shù)據(jù),請使用 QCString;如果它是沒有結(jié)尾的(也就是包含0)八位數(shù)據(jù),請使用QByteArray;如果它是文本,請使用QString。
字符串列表可以使用QStringList類來處理。你可以使用QStringList::split()來把一個(gè)字符串分割為一個(gè)字符串列表,并且可以使用 QStringList::join()把一個(gè)字符串列表連接成一個(gè)使用隨意間隔符的字符串。你也可以使用QStringList::grep()從一個(gè)字符串列表中獲得包含特定子字符串或者包含匹配特定的regex的字符串列表。

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
QFile

QFile類是一個(gè)操作文件的輸入/輸出設(shè)備。
QFile是用來讀寫二進(jìn)制文件和文本文件的輸入/輸出設(shè)備。QFile可以自己單獨(dú)被使用,但是如果和QDataStream或QTextStream一起使用將更加方便。
文件名通常可以通過構(gòu)造函數(shù)來傳遞,但也可以使用setName()來設(shè)置。你可以通過exists()來檢查一個(gè)文件是否存在并且可以通過remove()來移去一個(gè)文件。
文件可以用open()來打開、用close()來關(guān)閉、用flush()來刷新。數(shù)據(jù)通常可以使用QDataStream或者QTextStream進(jìn)行讀寫,但你也可以使用readBlock()和readLine()來讀,使用writeBlock()來寫。QFile也支持getch()、 ungetch()和putch()。
size()可以返回文件的大小。你可以通過使用at()函數(shù)得到當(dāng)前文件位置或者移到一個(gè)新的文件位置。如果你到了文件的末尾,atEnd()返回真。handle()返回文件句柄。
這里是一個(gè)使用QTextStream來一行一行地讀取一個(gè)文本文件的代碼段。它會(huì)把每一行帶上一個(gè)行號打印出來。

    QStringList lines;
    QFile file( "file.txt" );
    if ( file.open( IO_ReadOnly ) ) {
        QTextStream stream( &file );
        QString line;
        int n = 1;
        while ( !stream.eof() ) {
            line = stream.readLine(); // 不包括“\n”的一行文本
            printf( "%3d: %s\n", n++, line.latin1() );
            lines += line;
        }
        file.close();
    }
 
寫文本也很容易(假設(shè)我們有一個(gè)行的字符串列表要寫):

    QFile file( "file.txt" );
    if ( file.open( IO_WriteOnly ) ) {
        QTextStream stream( &file );
        for ( QStringList::Iterator it = lines.begin(); it != lines.end(); ++it )
            stream << *it << "\n";
        file.close();
    }

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
QTextStream

QTextStream類提供了使用QIODevice讀寫文本的基本功能。
文本流類的功能界面和標(biāo)準(zhǔn)的C++的iostream類非常相似。iostream和QTextStream的不同點(diǎn)是我們的流操作在一個(gè)很容易被繼承的QIODevice上,而iostream只能操作一個(gè)不能被繼承的FILE *指針。
Qt提供了幾個(gè)和iostream相似的全局函數(shù):
bin設(shè)置QTextStream來讀/寫二進(jìn)制數(shù)字
oct設(shè)置QTextStream來讀/寫八進(jìn)制數(shù)字
dec設(shè)置QTextStream來讀/寫十進(jìn)制數(shù)字
hex設(shè)置QTextStream來讀/寫十六進(jìn)制數(shù)字
endl強(qiáng)制換行
flush強(qiáng)制QIODevice刷新任何被緩存的數(shù)據(jù)
ws作為任何可用的控制符(在輸入的時(shí)候)
reset重新設(shè)置QTextStream為它的缺省模式(請見reset())
qSetW(int)設(shè)置字段寬度作為指定參數(shù)
qSetFill(int)設(shè)置填充字符作為指定參數(shù)
qSetPrecision(int)設(shè)置精確度作為指定參數(shù)
警告:默認(rèn)情況下,QTextStream在讀取流的時(shí)候,會(huì)自動(dòng)地檢測流中的數(shù)字是十進(jìn)制、八進(jìn)制、十六進(jìn)制或者二進(jìn)制格式。具體情況是,一個(gè)以“0”為開頭的數(shù)字是八進(jìn)制的,比如順序?yàn)?#8220;0100”將會(huì)被解釋為64。
QTextStream類讀寫文本,它不適合處理二進(jìn)制數(shù)據(jù)(而QDataStream是適合的)。
默認(rèn)情況下,輸出的是使用本地8位編碼后的Unicode文本(比如,QString)。這些可以使用setEncoding()方法進(jìn)行改變。對于輸入,QTextStream會(huì)自動(dòng)檢測標(biāo)準(zhǔn)Unicode“字節(jié)順序標(biāo)記的”文本文件,否則會(huì)使用本地8位編碼。
QIODevice 在構(gòu)造函數(shù)中被設(shè)置,或者之后在setDevice()中使用。如果輸入到達(dá)了atEnd(),返回真。數(shù)據(jù)可以使用operator>> ()重載操作符讀到適當(dāng)類型的變量中,或者使用read()把它作為整個(gè)部分讀到一個(gè)單一的字符串中,或者使用readLine()把一次讀一行。使用 skipWhiteSpace()可以忽略控制符。你可以使用flags()或setf()來設(shè)置流的標(biāo)記。這個(gè)流也支持width()、 precision()和 fill(),使用reset()可以重新恢復(fù)默認(rèn)設(shè)置。
也可以參考QDataStream、輸入/輸出和網(wǎng)絡(luò)和文本相關(guān)類.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
QTextCodec

QTextCodec 類提供文本編碼之間的轉(zhuǎn)換。
QT使用Unicode來存儲(chǔ),繪制以及操作字符串。在很多情況下,你可能想要使用不同的編碼方式來處理數(shù)據(jù)。例如大部分的日語文件都被存儲(chǔ)在Shift-JIS或者 ISO2022的文件中,而俄羅斯的用戶常常使用KOI8-R或者CP1251編碼方式。QT提供了一個(gè)QTextCodec 類集合來從Unicode格式轉(zhuǎn)化到相應(yīng)的格式。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

代碼部分

#include <qstring.h>
#include <qfile.h>
#include <qtextstream.h>
#include <qtextcodec.h>

int main()

 QFile file("test.txt");
 if (file.open(IO_ReadOnly|IO_Raw))
 {
  QTextStream floStream(&file);
  QString line;
  QTextCodec *codec=QTextCodec::codecForName("GBK");
  floStream.setCodec(codec);
  while ( floStream.atEnd()==0 )
  {
   line = codec->fromUnicode(floStream.readLine());
   qWarning(line);
  }
  file.close();   
 }
 return 0;
}
代碼中的主要改動(dòng)就是黃底的部分
意思就是創(chuàng)立一個(gè)中文GBK編碼樣式,然后按照這種方式來把讀入的文件流進(jìn)行重新編碼,這樣中文就可以順利輸出了,不信你可以試一試,哈哈,先介紹這么多,下次有什么下次再寫啦。

posted on 2012-04-26 09:44 米米 閱讀(537) 評論(0)  編輯 收藏 引用 所屬分類: qt
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            99re66热这里只有精品3直播| 日韩亚洲精品电影| 久久超碰97人人做人人爱| 一本久道久久综合婷婷鲸鱼| 国产精品qvod| 欧美一级欧美一级在线播放| 香蕉成人久久| 亚洲第一天堂av| 亚洲电影第1页| 欧美日韩一级视频| 欧美一区二区三区久久精品| 久久精品国产清高在天天线| 亚洲国产成人久久综合一区| 一本久道久久综合中文字幕| 国产欧美在线视频| 欧美激情小视频| 欧美午夜视频在线| 美女免费视频一区| 欧美日韩不卡| 久久久久久久久久久一区| 老牛国产精品一区的观看方式| 日韩视频精品在线观看| 亚洲欧美国产制服动漫| 亚洲精品1234| 午夜精品亚洲一区二区三区嫩草| 1024成人| 亚洲女同精品视频| 亚洲国产天堂久久综合网| 一区二区欧美日韩视频| 在线看视频不卡| 亚洲视频在线观看一区| 在线免费观看日本一区| 一本大道久久a久久精品综合| 国产曰批免费观看久久久| 99国产精品久久久久久久| 国色天香一区二区| 宅男噜噜噜66一区二区| 影音国产精品| 亚洲欧美日本在线| 亚洲一区二区三区在线视频| 久久久青草青青国产亚洲免观| 亚洲综合999| 欧美人妖另类| 欧美激情视频一区二区三区不卡| 国产日产欧产精品推荐色| 亚洲精品黄色| 91久久在线观看| 久久青草久久| 久久综合一区| 国产一级一区二区| 亚洲综合色激情五月| 亚洲视频精品在线| 欧美精品一区三区| 亚洲韩日在线| 亚洲精品网站在线播放gif| 久久久久久香蕉网| 欧美一区国产在线| 国产精品人成在线观看免费| 99在线|亚洲一区二区| 日韩西西人体444www| 久久人体大胆视频| 欧美99久久| 91久久中文字幕| 免费成人性网站| 欧美激情视频一区二区三区免费| 激情视频一区二区三区| 久久久久久久精| 欧美二区在线| 亚洲精品一区二区三区蜜桃久| 女同一区二区| 亚洲精品午夜精品| 亚洲午夜在线观看视频在线| 欧美午夜精品久久久久久人妖 | 日韩亚洲欧美一区| 欧美高清在线视频| 99精品视频免费观看| 亚洲综合色婷婷| 国产亚洲欧美一区二区| 欧美在线一二三区| 欧美大片免费久久精品三p | 亚洲天堂av电影| 国产精品夫妻自拍| 亚洲欧美日韩在线| 久久青草欧美一区二区三区| 在线看成人片| 欧美另类在线播放| 一区二区三区精品| 久久国产精品毛片| 亚洲欧洲视频| 国产精品视频精品视频| 久久九九有精品国产23| 最新69国产成人精品视频免费| 一本色道久久精品| 国产亚洲欧洲| 欧美高清视频在线| 亚洲欧洲av一区二区| 欧美高清影院| 亚洲欧美日韩国产综合精品二区| 国产亚洲精品成人av久久ww| 免费h精品视频在线播放| 国产精品99久久久久久www| 久久这里只精品最新地址| 亚洲日韩欧美视频| 国产三级欧美三级日产三级99| 欧美成人精品一区| 午夜精品福利一区二区三区av| 欧美激情国产高清| 欧美一级淫片aaaaaaa视频| 91久久国产综合久久蜜月精品| 国产精品久久久久久久免费软件| 久久阴道视频| 午夜精品www| 亚洲精品欧美日韩| 美脚丝袜一区二区三区在线观看| 亚洲永久免费av| 亚洲精品孕妇| 一色屋精品视频在线看| 国产精品黄色| 欧美欧美在线| 另类综合日韩欧美亚洲| 亚洲欧美日韩精品在线| 日韩视频不卡中文| 亚洲国产欧美久久| 女生裸体视频一区二区三区 | 在线电影一区| 国产日本欧美一区二区三区| 欧美视频你懂的| 欧美日韩免费高清一区色橹橹| 噜噜噜噜噜久久久久久91| 欧美一级精品大片| 亚洲欧美在线观看| 中国成人亚色综合网站| 亚洲精品视频在线看| 亚洲国产视频直播| 亚洲大胆人体在线| 欧美激情一区二区| 欧美高清一区| 亚洲国产高清在线观看视频| 免费看黄裸体一级大秀欧美| 久久久久久久久久久久久9999| 欧美亚洲网站| 欧美一区二区三区在线观看| 欧美一激情一区二区三区| 亚洲综合丁香| 欧美伊久线香蕉线新在线| 欧美一区二区三区久久精品茉莉花 | 免费不卡在线观看| 欧美成人一区二区| 欧美精品尤物在线| 欧美精品七区| 欧美日韩中文另类| 国产精品―色哟哟| 国产丝袜一区二区三区| 国内欧美视频一区二区| 红桃视频一区| 亚洲日本中文字幕| 亚洲午夜一级| 久久精品中文字幕免费mv| 久久久国产精彩视频美女艺术照福利| 久久精品国产亚洲aⅴ| 久久在线免费视频| 91久久极品少妇xxxxⅹ软件| 99v久久综合狠狠综合久久| 亚洲视频精选| 久久精品中文| 欧美激情精品久久久六区热门 | 一二三区精品福利视频| 亚洲欧美一级二级三级| 久久久精彩视频| 欧美日本韩国一区| 国产精品一级二级三级| 亚洲第一区在线| 亚洲天堂av高清| 麻豆精品传媒视频| 一二美女精品欧洲| 久久久久一区| 国产精品v欧美精品∨日韩| 国产亚洲一本大道中文在线| 亚洲黑丝一区二区| 午夜精品一区二区三区在线| 欧美二区乱c少妇| 亚洲天堂av综合网| 免费观看国产成人| 国产麻豆综合| av成人免费在线观看| 久久久久国产精品厨房| 亚洲精品久久7777| 久久成人国产精品| 欧美日韩在线精品| 亚洲高清电影| 欧美一区精品| 99精品福利视频| 免费在线看成人av| 国产一区二区中文字幕免费看| 99www免费人成精品| 你懂的网址国产 欧美| 亚洲一区二区在线免费观看视频| 欧美阿v一级看视频| 韩国精品在线观看| 欧美一区二区三区的|