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

一個文件中讀取數據并顯示的程序

 

void CMyDlg::OnBrowse() 
{
    
// TODO: Add your control notification handler code here

//  Choose a folder
    TCHAR szFull[_MAX_PATH];
    TCHAR szDrive[_MAX_DRIVE];
    TCHAR szDir[_MAX_DIR];
    ::GetModuleFileName(NULL, szFull, 
sizeof(szFull)/sizeof(TCHAR));
    _tsplitpath(szFull, szDrive, szDir, NULL, NULL);
    _tcscpy(szFull, szDrive);
    _tcscat(szFull, szDir);
    m_strPath 
= CString(szFull);
//    MessageBox(m_strPath);
    
//  select a file path
    CListBox *pCtrl = (CListBox *)GetDlgItem( IDC_LIST1 ) ;
    CFileFind finder;       
//  strWildcard += _T("C:\\*.*"); 
    BOOL bWorking 
= finder.FindFile( m_strPath+_T("*.data")) ;
    CString filename;
    
while(bWorking)   
    
{
        bWorking 
= finder.FindNextFile();   
        
if(finder.IsDots()) //ignore .  and ..
            continue;    
        
if(finder.IsDirectory()) 
        
{
            
//deal with folder, may recursively search files
        }

        
else
        
{
            filename 
= finder.GetFileName();    
            pCtrl
->AddString(filename);
            UpdateData(FALSE);
        }
   
    }
   
    finder.Close(); 
//    MessageBox(m_strPath);
}
第一步是先獲得一個要打開的文件的列表,并在ListBox中顯示出來,也就是對單擊瀏覽按鈕的消息響應。
代碼解釋:
_MAX_DRIVE:Maximum length of drive component,
_MAX_PATH:Maximum length of full path,
_MAX_DIR:Maximum length of directory component。
GetModuleFileName是SDK函數其原型為:
DWORD GetModuleFileName(
  HMODULE hModule,    
// handle to module
  LPTSTR lpFilename,  // path buffer
  DWORD nSize         // size of buffer
);

若函數成功,返回的是TCHAR型字符的長度。如果函數失敗則返回0。
第一個參數是要查找的組件或者模塊的句柄。如果是NULL則返回當前程序的路徑。
第二個參數是一個指針,指向一塊buffer于接受路徑字符串,就用剛剛定義的TCHAR型數組szFull的名字。
第三個參數是buffer的長度,要求是保存TCHAR型字符的長度。
TCHAR型16位Unicode字符集中的字符類型,對應8位ANSI字符集中char型。Unicode字符集在Windows2000和WindowsNT上有更高的效率。
通過GetModuleFileName函數就將當前程序的路徑傳遞給了szFull數組,但是現在的路徑是當前應用程序的,而我們要獲得的是當前的目錄路徑。
_tsplitpath函數就是用于分割路徑的,函數原型如下:

void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext );

函數的參數意義一目了然,最后一個參數得到的文件擴展名是帶"."的。
使用這個函數要包含<stdlib.h>頭文件。
m_strPath是一個Cdlg類的成員變量,用于保存這個路徑,在以后打開文件時還要用到。
CFileFind類是從CObject類中繼承下來的,在繼承圖表中并不在File service中,而是在Internet service中,在這里只用它尋找本地文件。
在這段代碼中要在尋找的文件是以“.data”為擴展名的,所以搜索名字為m_strPath+"*.data"的文件。FindFile的返回值是一個布爾變量,非零值表示成功。FindNextFile返回非零值表示有更多的文件,零值表示是最后一個文件。在做有關文件的屬性的操作之前總使用該調用該函數至少一次。這兩個函數的原型如下:

virtual BOOL FindFile( LPCTSTR pstrName = NULL, DWORD dwUnused = 0 );
virtual BOOL FindNextFile( );

 下邊的條件語句是忽略找到的文件夾和"."以及".."的。也可以在文件夾中做遞歸搜索,可以得到包括當前目錄子目錄的文件。
這樣就將當前目錄下的所有data文件(不包括子文件夾)添加到ListBox列表中了。如圖:

第二步就是雙擊選中一文件,能將文件的數據用波形的方式顯示,在這里用的是NI的Messurement Stdio控件的評估版,如果將數組讀出來也可以自己制圖。先添加ListBox的雙擊消息響應,void CMyDlg::OnDblclkList1。注意在空間中的notify風格應該是選中狀態。
消息響應函數如下:

void CMyDlg::OnDblclkList1() 
{
    
// TODO: Add your control notification handler code here
//    MessageBox(m_strPath);
    CString fileName;
    CListBox 
*pCtrl = (CListBox *)GetDlgItem(IDC_LIST1);
    pCtrl
->GetText(pCtrl->GetCurSel(),fileName);
    m_strPath 
+= fileName;
//    MessageBox(m_strPath);
    CStdioFile file(m_strPath, CStdioFile::modeRead);
    CString strData;
    
//double *data1;
    
//double *data2;
    int sampleRate = 0;
    
int sampleTime = 0;
//    int dataLen = 0;
    int lineNo = 0;

    file.ReadString(strData);
    sampleRate 
= atoi(strData);
    file.ReadString(strData);
    sampleTime 
= atoi(strData);
    dataLen 
= sampleRate*sampleTime;
    data1 
= new double[dataLen];
    data2 
= new double[dataLen];


    
while(file.ReadString(strData))
    
{
        
if(strData == "start")
            
continue;
        
if(strData == "end")
            
break;
        
else
        
{
            
if((lineNo/dataLen) < 1)
            
{
                data1[lineNo] 
= atof(strData);
                
++lineNo;
            }

            
else if((lineNo/dataLen) < 2)
            
{
                data2[lineNo
-(int)(lineNo/dataLen)*dataLen]  = atof(strData);
                lineNo
++;
            }

        }

    }

    
if(lineNo!=dataLen*2)
        MessageBox(
"數據損壞");
    
else
    
{
        
double newTime = 0;
        
double sinePoint;
        
for ( int i = 1 ; i <dataLen ; i ++)
        
{
            newTime
++;
            sinePoint 
= data2[i];
            m_graph.ChartXY(newTime, sinePoint);
        }


    }

}

代碼解釋:
首先說明一下data文件的格式,就是普通的文本文件改掉后綴名,以免誤打開損壞數據。數據保存的格式為單列。第一個數字表示采樣率,第二個數字表示采樣時間,start是開始的標識,end是數據結束的標識。采樣率*采樣時間是一個通道的數據長度,這里有兩個通道。
下面解釋代碼:
第一步定義的filename與OnBrows消息響應中的并無關聯(參見名字作用域說明),它保存了雙擊的文件名字符。
CListBox的成員函數GetCurSel原型如下:

int GetCurSel( ) const;

返回的int型變量是雙擊選中的文件在列表的索引號,是以0為開始自上向下的序號。
CListBox::GetText原型如下:

void GetText( int nIndex, CString& rString ) const;

兩個參數分別為索引號和要接受索引號對應的文件的名字的CString類型對象。再同CDlg的成員變量保存的路徑相加就獲得了雙擊選中的文件的全路徑。
CStdioFile是繼承CFile的類,它提供了一次讀入文件的一行到CString對象的方法:ReadString。并且將當前的位置移動到下一行,所以可以連續使用它來讀取數據。ReadString原型如下:

BOOL ReadString(CString& rString);

sampleRate和sampleTime分別是采樣率和采樣時間。
先將采樣率和采樣時間讀出來計算出一路通道的數據長度,然后分配內存給保存數據的數組。判斷開始標記start,開始讀取數據。并且通過lineNo變量判斷數據屬于通道1還是通道2,和判斷數據的長度是否合理。
最后顯示數據。


 

posted on 2008-09-05 17:01 wangwei 閱讀(1168) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導航

統計

常用鏈接

留言簿(2)

隨筆分類

隨筆檔案

文章檔案

收藏夾

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲一区二区三区视频播放| 91久久久精品| 久久综合色婷婷| 亚洲国产精品一区二区三区| 欧美亚洲综合网| 亚洲五月婷婷| 亚洲综合导航| 免费成人性网站| 欧美国产日韩免费| 国产精品久久久91| 国产亚洲欧美日韩日本| 黑丝一区二区三区| 亚洲欧洲日本专区| 欧美中文字幕在线播放| 欧美二区在线观看| 亚洲视频在线一区| 久久久999国产| 欧美亚男人的天堂| 91久久夜色精品国产九色| 午夜欧美不卡精品aaaaa| 欧美成人视屏| 欧美在线三区| 国产精品天天摸av网| 亚洲精品在线电影| 久久久久在线观看| 亚洲一区二区日本| 欧美日韩一区二区国产| 91久久视频| 欧美成人免费在线| 久久精品国产一区二区三区免费看 | 亚洲欧美日韩综合aⅴ视频| 亚洲影音先锋| 欧美日韩一区二区在线观看| 极品尤物久久久av免费看| 亚洲特色特黄| 99v久久综合狠狠综合久久| 久久精品av麻豆的观看方式| 国产欧美日韩综合一区在线播放| 日韩视频在线播放| 亚洲黄页视频免费观看| 美日韩精品视频| 99av国产精品欲麻豆| 亚洲成色999久久网站| 久久人人爽人人爽爽久久| 狠狠色综合色区| 亚洲第一偷拍| 欧美美女日韩| 久久精品91久久久久久再现| 亚洲影院高清在线| 激情久久影院| 亚洲欧洲日本mm| 国产精品白丝jk黑袜喷水| 午夜日韩电影| 久久久青草婷婷精品综合日韩| 国产亚洲欧美一区二区三区| 免费观看在线综合| 欧美日韩三级在线| 久久精品视频在线播放| 欧美aⅴ一区二区三区视频| 一本一本久久a久久精品牛牛影视| av成人手机在线| 久久综合网络一区二区| 国产精品盗摄久久久| 美国十次成人| 一本色道久久综合一区| 久久精品99国产精品| 99re66热这里只有精品4| 性色av一区二区三区在线观看 | 久久久综合网站| 欧美一区2区视频在线观看| 极品中文字幕一区| 一本久道久久综合婷婷鲸鱼| 国产日本亚洲高清| 亚洲视频网站在线观看| 亚洲欧洲精品一区二区三区波多野1战4| 日韩视频免费观看高清完整版| 亚洲欧美变态国产另类| aa亚洲婷婷| 欧美日韩精品一区视频 | 国产欧美 在线欧美| 亚洲电影在线| 亚洲精品久久久久久一区二区 | 亚洲国产精品999| 国内在线观看一区二区三区| 亚洲图片欧洲图片av| 亚洲自拍啪啪| 国产日韩精品视频一区二区三区| 亚洲国产天堂网精品网站| 亚洲精品中文字幕女同| 久久蜜桃av一区精品变态类天堂| 欧美理论在线播放| 亚洲国产精品一区二区第四页av| 亚洲在线播放电影| 午夜精品久久久久久久久久久久久| 欧美日韩日日骚| 新片速递亚洲合集欧美合集| 美女网站在线免费欧美精品| 一区二区三区欧美日韩| 国产视频一区在线观看一区免费| 美女脱光内衣内裤视频久久网站| 亚洲丝袜av一区| 亚洲日本一区二区三区| 久久九九精品99国产精品| 亚洲视频在线二区| 亚洲国产视频直播| 国产亚洲毛片| 国产精品午夜在线观看| 欧美日韩国产成人在线观看| 久久精品1区| 久久爱91午夜羞羞| 亚洲一级黄色av| 亚洲美女一区| 欧美激情欧美狂野欧美精品| 久久国产天堂福利天堂| 午夜精品久久久久久久99热浪潮| 亚洲另类黄色| 一区二区三区日韩在线观看| 亚洲国产精品成人综合色在线婷婷| 国产精品欧美日韩一区二区| 欧美日韩免费区域视频在线观看| 欧美.www| 国产精品av一区二区| 国产精品高潮呻吟| 国产精品香蕉在线观看| 国产午夜精品理论片a级探花| 国产欧美日韩另类视频免费观看| 欧美视频在线不卡| 国产精品永久免费观看| 国产无一区二区| 欧美丰满高潮xxxx喷水动漫| 欧美一区二区三区精品电影| 免费看成人av| 欧美精品国产精品| 亚洲精品中文字幕女同| 久久久久在线| 亚洲一区不卡| 欧美极品欧美精品欧美视频| 国产精品视频一二三| 亚洲美女91| 亚洲第一天堂av| 久久久久久久性| 国产网站欧美日韩免费精品在线观看| 91久久久国产精品| 蜜桃av一区二区三区| 欧美在线1区| 国产九九视频一区二区三区| 日韩一区二区高清| 久久久久久久久久久一区| 国产精品99久久99久久久二8 | 亚洲天堂网在线观看| 91久久精品美女高潮| 久久午夜色播影院免费高清| 国产精品美女主播| 午夜国产欧美理论在线播放| 一本色道久久综合| 国产麻豆日韩欧美久久| 性久久久久久| 午夜视频精品| 韩国福利一区| 亚洲第一精品久久忘忧草社区| 久久久青草青青国产亚洲免观| 亚洲成色www久久网站| 亚洲大胆视频| 欧美系列亚洲系列| 久久国产主播| 欧美阿v一级看视频| 欧美日韩亚洲一区| 亚洲欧美精品在线观看| 亚洲欧美久久久| 久久国产欧美日韩精品| 国产中文一区二区三区| 亚洲六月丁香色婷婷综合久久| 国产精品一区二区三区四区| 老牛嫩草一区二区三区日本| 欧美日韩在线播| 欧美不卡一卡二卡免费版| 欧美三级日本三级少妇99| 久久色在线观看| 欧美日韩亚洲国产一区| 久久在线91| 国外成人性视频| 中文国产成人精品久久一| 亚洲欧洲综合另类| 久久国产精品黑丝| 午夜久久久久久| 欧美日韩国产在线看| 蜜乳av另类精品一区二区| 国产欧美日韩激情| 亚洲一区二区三区中文字幕在线 | av成人毛片| 亚洲天堂网在线观看| 麻豆av福利av久久av| 欧美国产视频在线| 亚洲国产高潮在线观看| 久久久久欧美| 亚洲国产一区二区精品专区| 亚洲国产精品尤物yw在线观看| 欧美中文在线观看国产| 久久在线播放| 一本色道久久综合亚洲91|