




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章字符串和I/O5.1字符串5.2文件的輸入/輸出習(xí)題5在儀器控制應(yīng)用中,數(shù)字型數(shù)據(jù)通常以字符串形式傳送,并且LabVIEW中有許多內(nèi)建的字符串節(jié)點(diǎn)允許用戶(hù)處理這些字符串?dāng)?shù)據(jù)。在文件中讀/寫(xiě)數(shù)據(jù)也需要使用字符串。本章將系統(tǒng)介紹字符串控件的使用和文件輸入、輸出操作。5.1字符串字符串是一個(gè)字符序列,這些字符有些是可以顯示的,有些不可以顯示。在LabVIEW中,除了通常的字符串應(yīng)用外,在進(jìn)行儀器控制操作時(shí),控制命令和數(shù)據(jù)大都也是按字符串格式傳送的。掌握并靈活地應(yīng)用字符串對(duì)編程很重要。5.1.1字符串控件字符串控件和指示器位于Controls→AllControls→String&Path子模板中,在List&Table子模板中也有3個(gè)可以輸入和顯示字符串的控件,即Table、Tree和ExpressTable,如圖5-1所示。圖5-1String&Path子模板和List&Table子模板
1.StringControl&Indicator
StringControl&Indicator這兩個(gè)控件實(shí)現(xiàn)最基本的字符串操作功能。用戶(hù)輸入或輸出字符串,使用操作工具或標(biāo)簽工具可以修改字符串控件中的文本,可以使用位置工具拖動(dòng)控件一角來(lái)縮放字符串控件大小。簡(jiǎn)單的舉例如圖5-2所示。
2.ComboBox在ComboBox中,可以有多個(gè)字符串,每一個(gè)字符串是一個(gè)條目,并對(duì)應(yīng)一個(gè)值,通過(guò)圖5-3所示的例子說(shuō)明ComboBox控件的用法。各個(gè)條目通過(guò)快捷菜單中的EditItems…命令或者Properties中的EditItems選單進(jìn)行編輯,如圖5-4所示。圖5-2StringControl&Indicator的簡(jiǎn)單使用圖5-3ComboBox的使用圖5-4設(shè)置ComboBox中的各個(gè)條目
3.Tree
Tree控件以樹(shù)型目錄來(lái)設(shè)置條目,如圖5-5所示。用戶(hù)可以通過(guò)右鍵彈出的菜單來(lái)設(shè)置每一個(gè)條目,比如:用戶(hù)可以將一個(gè)條目設(shè)置為ChildOnly(只能作子目錄),這樣在該條目下就不能再有任何子目錄。
4.Table和ExpressTable表格是由字符串組成的二維數(shù)組,其每個(gè)單元格可以放一個(gè)字符串??焖俦砀窨梢院芊奖愕禺a(chǎn)生二維字符串?dāng)?shù)組。圖5-6所示的例子是利用BuildTableExpressVI構(gòu)造一張表,然后送給TableIndicator顯示。TimeDelayExpressVI設(shè)置的值是2s,所以每隔2秒產(chǎn)生一個(gè)隨機(jī)數(shù)。注意,在BuildTableExpressVI的屬性設(shè)置中需選擇Includetimedata項(xiàng),否則不顯示時(shí)間。圖5-5Tree結(jié)構(gòu)圖5-6ExpressTable的使用5.1.2字符串控件的屬性通過(guò)字符串控件的快捷菜單可以設(shè)置字符串的一些特殊屬性。
1.顯示方式在字符串的設(shè)置選單中有以下4種不同的顯示方式:
(1)?NormalDisplay:正常顯示,這是默認(rèn)的顯示方式。在這種方式下,制表符、ESC等字符不顯示。
(2)?‘\’CodeDisplay:反斜杠代碼顯示。用戶(hù)可以使用該方式查看正常方式下不可顯示的字符代碼。在該方式下,LabVIEW把輸入字符串中的反斜杠“\”及其后面的字符作為一種代碼。此方式在程序調(diào)試和向儀器或其他設(shè)備傳輸字符時(shí)比較有用。
(3)?PasswordDisplay:口令顯示。這是一種密碼顯示方式,用戶(hù)輸入的字符均以“*”顯示。
(4)?HexDisplay:十六進(jìn)制顯示。這種方式在程序調(diào)試和VI通信時(shí)比較有用。用戶(hù)可以將字符串和指示器配置為不同的顯示類(lèi)型,如圖5-7所示。
2.滾動(dòng)條為了以較小的字符串控件窗口顯示更多的信息,使前面板更簡(jiǎn)潔,可以使VisibleItems中的Scrollbar有效。如果字符串控件的高度大于兩行,在控件的右側(cè)會(huì)出現(xiàn)一個(gè)垂直的滾動(dòng)條。
3.UpdateValueWhileTyping當(dāng)UpdateValueWhileTyping選項(xiàng)有效時(shí),在程序運(yùn)行過(guò)程中,字符串顯示器的內(nèi)容會(huì)隨著字符的輸入而改變,不需要用戶(hù)按動(dòng)鍵盤(pán)上的回車(chē)按鈕或工具欄的確認(rèn)按鈕進(jìn)行輸入確認(rèn),這種特性適用于檢驗(yàn)輸入的正確性,可以及時(shí)為用戶(hù)提供反饋信息。圖5-7字符串的4種顯示類(lèi)型5.1.3基本字符串節(jié)點(diǎn)
LabVIEW提供了許多用于字符串處理的節(jié)點(diǎn),位于節(jié)點(diǎn)模板的String子模板中(如圖5-8所示),下面將逐一介紹。
1.StringLength字符串長(zhǎng)度節(jié)點(diǎn)如圖5-9所示,該節(jié)點(diǎn)返回字符串中字符的個(gè)數(shù),以字節(jié)為單位,需要注意的是,一個(gè)漢字的長(zhǎng)度是2。如果連接到String端口上的數(shù)據(jù)是一個(gè)String數(shù)組,則Length端口輸出的是一個(gè)相同維數(shù)的數(shù)字?jǐn)?shù)組,數(shù)組中的每一個(gè)元素表示String數(shù)組中相應(yīng)位置元素的字符串長(zhǎng)度。圖5-8String子模板圖5-9字符串長(zhǎng)度節(jié)點(diǎn)
2.ConcatenateString連接字符串節(jié)點(diǎn)如圖5-10所示,該節(jié)點(diǎn)可以把所有輸入的多個(gè)字符串按照前后次序合并成一個(gè)新的字符串輸出,輸入可以是單一字符、字符串?dāng)?shù)組或字符串簇。輸入?yún)?shù)的個(gè)數(shù)可以通過(guò)拖動(dòng)圖標(biāo)的下邊沿來(lái)添加,或者在圖標(biāo)輸入端口的右鍵彈出的菜單中選擇AddInput。
3.StringSubset子字符串節(jié)點(diǎn)如圖5-11所示,該節(jié)點(diǎn)用于得到已有字符串的子字符串,參數(shù)offset(偏移量)指定子字符串在原字符串中的起始位置,參數(shù)length指定子字符串的長(zhǎng)度。注意,第一個(gè)字符的偏移量為0。圖5-10連接字符串節(jié)點(diǎn)圖5-11子字符串節(jié)點(diǎn)
4.ToUpperCase和ToLowerCase大小寫(xiě)轉(zhuǎn)換節(jié)點(diǎn)如圖5-12所示,ToUpperCase將輸入字符串內(nèi)的英文字母轉(zhuǎn)換為大寫(xiě)字母;ToLowerCase將輸入字符串內(nèi)的英文字母轉(zhuǎn)換為小寫(xiě)字母。如果字符串中含有非英文字母的字符,則節(jié)點(diǎn)不對(duì)這些字符做任何處理。
5.ReplaceSubstring
ReplaceSubstring節(jié)點(diǎn)如圖5-13所示,其功能是在輸入字符串中指定位置插入、刪除或替換一個(gè)子字符串。如果輸入到length端口中的數(shù)字為0,則節(jié)點(diǎn)會(huì)將輸入到substring端口中的子字符串插入到由string端口輸入的字符串中,插入位置由offset端口決定;若輸入到substring端口中的是一個(gè)空字符串,則節(jié)點(diǎn)會(huì)從offset端口指定的位置刪除由length端口指定長(zhǎng)度的字符;若輸入到substring端口中的子字符串不是一個(gè)空字符串,且輸入到length端口中的數(shù)字大于0,則節(jié)點(diǎn)會(huì)用這個(gè)子字符串在offset端口指定的位置處替換由length端口所指定長(zhǎng)度的字符串。圖5-12大小寫(xiě)轉(zhuǎn)換節(jié)點(diǎn)圖5-13ReplaceSubstring節(jié)點(diǎn)
6.SearchandReplaceString
SearchandReplaceString節(jié)點(diǎn)如圖5-14所示,其功能是將一個(gè)或所有指定的子字符串替換為另一個(gè)子字符串。節(jié)點(diǎn)從offset端口指定的位置開(kāi)始搜索searchstring端口所指定的字符串,然后將搜索到的第一個(gè)子字符串替換為由replacestring端口所輸入的字符串。
7.MatchPattern
MatchPattern節(jié)點(diǎn)如圖5-15所示,從offset開(kāi)始查找由regularexpression端口輸入的字符串,找到后按照該位置把輸入字符串分為三段輸出。圖5-14SearchandReplaceString節(jié)點(diǎn)圖5-15MatchPattern節(jié)點(diǎn)
8.FormatData/TimeString
FormatData/TimeString節(jié)點(diǎn)如圖5-16所示,其功能是按照用戶(hù)指定的格式將一個(gè)時(shí)間標(biāo)記值或一個(gè)數(shù)字值作為時(shí)間顯示。時(shí)間的輸出格式見(jiàn)表5.1。
9.ScanFromString
ScanFromString節(jié)點(diǎn)如圖5-17所示,其功能是掃描從inputstring端口輸入的字符串,并將其轉(zhuǎn)換為由formatstring端口指定的格式。當(dāng)對(duì)輸入的字符串的格式非常明確時(shí),可以使用該節(jié)點(diǎn)。
10.FormatIntoString
FormatIntoString節(jié)點(diǎn)如圖5-18所示,其功能是將字符串、數(shù)字、路徑或布爾量格式化為文本,文本的格式由formatstring端口指定。圖5-16FormatData/TimeString節(jié)點(diǎn)表5.1FormatData/TimeString節(jié)點(diǎn)的時(shí)間輸出格式表圖5-17ScanFromString節(jié)點(diǎn)圖5-18FormatIntoString節(jié)點(diǎn)
11.SpreadsheetStringToArray
SpreadsheetStringToArray節(jié)點(diǎn)如圖5-19所示,其功能是將spreadsheetstring端口輸入的表單格式的字符串?dāng)?shù)據(jù)轉(zhuǎn)換為一個(gè)數(shù)組,數(shù)組的格式由arraytype端口指定。
12.ArrayToSpreadsheetString
ArrayToSpreadsheetString節(jié)點(diǎn)如圖5-20所示,其功能是將一個(gè)任意維數(shù)的數(shù)組轉(zhuǎn)換為一個(gè)字符串格式的表格,這個(gè)表格包含制表符、列的分隔符、行的終止符EOL,對(duì)于三維或更高維的數(shù)組,這個(gè)表格還包括分頁(yè)標(biāo)識(shí)。圖5-19SpreadsheetStringToArray節(jié)點(diǎn)圖5-20ArrayToSpreadsheetString節(jié)點(diǎn)5.1.4附加字符串節(jié)點(diǎn)除了基本字符串節(jié)點(diǎn),LabVIEW還提供了一些附加字符串運(yùn)算節(jié)點(diǎn),利用這些節(jié)點(diǎn)可以完成一些較復(fù)雜的字符串運(yùn)算。附加字符串節(jié)點(diǎn)位于AdditionalStringFunctions子模板中,如圖5-21所示。
1.Search/SplitString
Search/SplitString節(jié)點(diǎn)如圖5-22所示,該節(jié)點(diǎn)將輸入的字符串從特定的位置分離成兩個(gè)子字符串,分離位置由searchstring/char端口和offset端口共同決定。分離得到的兩個(gè)子字符串分別從substringbeforematch端口和match+restofstring端口輸出,offsetofmatch端口輸出截?cái)嘧址奈恢?。如果?jié)點(diǎn)沒(méi)有搜索到由searchstring/char端口指定的字符串,則offsetofmatch端口返回-1,substringbeforematch端口返回整個(gè)字符串,match+restofstring端口返回一個(gè)空字符串。圖5-21AdditionalStringFunctions子模板圖5-22Search/SplitString節(jié)點(diǎn)
2.PickLine
PickLine節(jié)點(diǎn)如圖5-23所示,該節(jié)點(diǎn)從multi-linestring端口中輸入的多行字符串中提取一指定行,并把這行加到字符串string后,組成一個(gè)新的字符串從outputstring輸出,指定行的位置由lineindex端口決定。
3.MatchFirstString
MatchFirstString節(jié)點(diǎn)如圖5-24所示,該節(jié)點(diǎn)將從string端口輸入的搜索字符串與從stringarray端口輸入的字符串?dāng)?shù)組中的每一個(gè)元素進(jìn)行比較。如果發(fā)現(xiàn)搜索字符串與數(shù)組中的某一元素相匹配,則從index端口返回該元素的索引值;若沒(méi)有發(fā)現(xiàn)相匹配的元素,則返回-1,并從outputstring端口輸出從string端口輸入的搜索字符串。圖5-23PickLine節(jié)點(diǎn)圖5-24MatchFirstString節(jié)點(diǎn)
4.MatchTrue/FalseString
MatchTrue/FalseString節(jié)點(diǎn)如圖5-25所示,該節(jié)點(diǎn)是將從string端口輸入的字符串與從truestring端口和從falsestring端口輸入的字符串比較,并從selection端口返回結(jié)果。若與truestring端口中的字符串匹配,則返回True;若與falsestring端口中的字符串匹配,則返回False;如果與這兩個(gè)字符串都不匹配,也返回False。
5.ScanStringForTokens
ScanStringForTokens節(jié)點(diǎn)如圖5-26所示,該節(jié)點(diǎn)從inputstring端口中輸入的字符串中搜索特征字符串,并將特征字符串之間的子字符串通過(guò)tokenstring端口輸出。特征字符串一般是關(guān)鍵字、數(shù)字或運(yùn)算符,由operators端口和delimiters端口指定,搜索的起始位置由offset端口決定。圖5-25MatchTrue/FalseString節(jié)點(diǎn)圖5-26ScanStringForTokens節(jié)點(diǎn)
6.SearchandReplacePattern
SearchandReplacePattern節(jié)點(diǎn)如圖5-27所示,該節(jié)點(diǎn)從string端口輸入的字符串中搜索與從regularexpression端口輸入的正規(guī)表達(dá)式相匹配的子字符串,并將replacestring端口輸入的字符串替換搜索到的子字符串。
7.IndexStringArray
IndexStringArray節(jié)點(diǎn)如圖5-28所示,該節(jié)點(diǎn)從stringarray端口輸入的字符串?dāng)?shù)組中取出一個(gè)指定的元素,并將其與string端口輸入的字符串合并成一個(gè)新的字符串輸出,提取元素的位置由index端口決定。
8.AppendTrue/FalseString
AppendTrue/FalseString節(jié)點(diǎn)如圖5-29所示,該節(jié)點(diǎn)根據(jù)selector端口的輸入,將字符串“true”或“false”添加到string端口輸入的字符串中。圖5-27SearchandReplacePattern節(jié)點(diǎn)圖5-28IndexStringArray節(jié)點(diǎn)圖5-29AppendTrue/FalseString節(jié)點(diǎn)
9.RotateString
RotateString節(jié)點(diǎn)如圖5-30所示,該節(jié)點(diǎn)將從string端口輸入的字符串中的第一個(gè)字符放到該字符串的最末尾,其他所有字符依次前移一位。
10.ReverseString
ReverseString節(jié)點(diǎn)如圖5-31所示,該節(jié)點(diǎn)將從string輸入的字符串中的字符按照從后至前的倒序順序輸出。
11.TrimWhitespace
TrimWhitespace節(jié)點(diǎn)如圖5-32所示,該節(jié)點(diǎn)刪除從string端口輸入的字符串頭部或尾部的空格、回車(chē)符及換行符,具體的刪除位置由location端口指定。location端口輸入值的含義是:“0”表示從頭部和尾部刪除;“1”表示只刪除頭部;“2”表示只刪除尾部。圖5-30RotateString節(jié)點(diǎn)圖5-31ReverseString節(jié)點(diǎn)圖5-32TrimWhitespace節(jié)點(diǎn)5.1.5字符串使用舉例
【例5.1】MatchPattern節(jié)點(diǎn)的使用。
VI的前面板和程序框圖如圖5-33所示,查找匹配的字符串。
【例5.2】FormatIntoString節(jié)點(diǎn)的使用。
VI的前面板和程序框圖如圖5-34所示。使用FormatIntoString節(jié)點(diǎn)可以同時(shí)轉(zhuǎn)換多個(gè)數(shù)值到字符串,但在FormatString端口,必須對(duì)每一個(gè)被轉(zhuǎn)換的數(shù)值進(jìn)行格式說(shuō)明,數(shù)值的順序由上到下。如果FormatString端口沒(méi)有連線(xiàn),則輸出字符串會(huì)自動(dòng)按輸入數(shù)據(jù)類(lèi)型的默認(rèn)值格式化。圖5-33例5.1的前面板和程序框圖圖5-34例5.2的前面板和程序框圖用鼠標(biāo)左鍵雙擊FormatIntoString節(jié)點(diǎn),或在該節(jié)點(diǎn)上右鍵彈出的菜單中選擇EditFormatString選項(xiàng),將彈出圖5-35所示的對(duì)話(huà)框。通過(guò)對(duì)話(huà)框可以對(duì)字符串格式、數(shù)制、小數(shù)點(diǎn)精確位數(shù)、數(shù)據(jù)類(lèi)型及輸出字段域?qū)挼冗M(jìn)行設(shè)置。配置好格式字符串后,單擊“OK”按鈕,該節(jié)點(diǎn)自動(dòng)產(chǎn)生一個(gè)字符串常量,并與FormatString端口相連。需要注意的是,CurrentFormatSequence(當(dāng)前格式化順序)項(xiàng)是以用戶(hù)連線(xiàn)順序顯示變量的類(lèi)型的。在本例中,該項(xiàng)顯示了Formatstring、Formatfractionalnumber和Formatstring三項(xiàng)輸入?yún)?shù)。
【例5.3】Search/SplitString節(jié)點(diǎn)的使用。
VI的前面板和程序框圖如圖5-36所示,圖5-36(a)是指定了要搜索的字符串of;圖5-36(b)是直接指定截?cái)嘧址奈恢?。圖5-35EditFormatString對(duì)話(huà)框圖5-36例5.3的前面板和程序框圖5.2文件的輸入/輸出文件輸入/輸出(I/O)操作用于從磁盤(pán)文件中存儲(chǔ)或讀取數(shù)據(jù)。這些操作通常包括三個(gè)基本步驟:
(1)打開(kāi)現(xiàn)存文件或創(chuàng)建一個(gè)新文件;
(2)寫(xiě)入或讀取文件;
(3)關(guān)閉文件。
LabVIEW支持以下幾種文件類(lèi)型用于數(shù)據(jù)的輸入和輸出:電子表格文件、文本文件、二進(jìn)制文件、數(shù)據(jù)記錄文件、波形文件以及LabVIEW測(cè)試文件。
1.電子表格文件電子表格文件以ASCII碼的格式來(lái)存儲(chǔ)數(shù)據(jù),是一種特殊的文本文件。與普通文本文件不同的是,文件格式中做了一些特殊的標(biāo)記,例如用制表符來(lái)作段落標(biāo)記,以便讓一些電子表格處理軟件(如MicrosoftExcel)直接讀取并處理數(shù)據(jù)文件中存儲(chǔ)的數(shù)據(jù)。
2.文本文件文本文件是用由ASCII碼組成的文本數(shù)據(jù)流存成的文件格式。這種文件格式的優(yōu)點(diǎn)是通用性強(qiáng),即文件的內(nèi)容可以被MicrosoftWord、MicrosoftExcel以及Windows自帶的記事本等應(yīng)用程序直接讀取,并且這種文件類(lèi)型最容易進(jìn)行文件轉(zhuǎn)換。該文件格式的弱點(diǎn)表現(xiàn)在三方面:第一,用這種格式保存和讀取文件的時(shí)候需要進(jìn)行文件格式轉(zhuǎn)換,例如,讀取文本文件時(shí),要將文本文件的ASCII碼轉(zhuǎn)換為計(jì)算機(jī)可以識(shí)別的二進(jìn)制代碼格式,存儲(chǔ)文件的時(shí)候也需要將二進(jìn)制代碼轉(zhuǎn)換為ASCII碼的格式,因而需要花費(fèi)額外的時(shí)間;第二,用這種格式存儲(chǔ)的文件占用的磁盤(pán)空間比較大,存儲(chǔ)的速度相對(duì)比較慢;第三,對(duì)于文本類(lèi)型的數(shù)據(jù),不能隨機(jī)訪(fǎng)問(wèn)其中的某個(gè)數(shù)據(jù),這樣當(dāng)需要找到文件中某個(gè)位置的數(shù)據(jù)的時(shí)候,需要把這個(gè)位置之前的所有數(shù)據(jù)全部讀出來(lái),效率比較低。
3.二進(jìn)制文件二進(jìn)制文件格式是計(jì)算機(jī)上存取速度最快,格式最為緊湊,冗余數(shù)據(jù)比較少的一種文件格式。用這種格式存儲(chǔ)文件,占用的空間要比文本文件小得多,并且用二進(jìn)制格式存取數(shù)據(jù)不需要進(jìn)行格式轉(zhuǎn)換,因而速度快,效率高。但是用這種格式存儲(chǔ)的數(shù)據(jù)文件無(wú)法被一般的字處理文件,如MicrosoftWord讀取,無(wú)法被不具備詳細(xì)文件格式信息的程序讀取,因而其通用性較差。
4.?dāng)?shù)據(jù)記錄文件數(shù)據(jù)記錄文件是一種二進(jìn)制文件,只是在LabVIEW等G語(yǔ)言中這類(lèi)型的文件扮演著比較重要的角色,所以在這里為其建立了一個(gè)獨(dú)立的類(lèi)型。數(shù)據(jù)記錄文件只能被G語(yǔ)言,如LabVIEW讀取,它以記錄的格式存儲(chǔ)數(shù)據(jù),一個(gè)記錄中可以存放幾種不同類(lèi)型的數(shù)據(jù),或者可以說(shuō)一個(gè)記錄就是一個(gè)“簇”。
5.波形文件波形文件是一種特殊的數(shù)據(jù)記錄文件,它記錄了發(fā)生波形的一些基本信息,如波形發(fā)生的起始時(shí)間、采樣的間隔時(shí)間等。
6.LabVIEW測(cè)試文件
LabVIEW測(cè)試文件是一種只有LabVIEW才能讀取的文件格式,后綴為lvm,適合于只用LabVIEW訪(fǎng)問(wèn)的文件,這種文件的特點(diǎn)是使用簡(jiǎn)單方便。5.2.1文件I/O節(jié)點(diǎn)簡(jiǎn)介
LabVIEW提供了很多處理文件I/O操作的VI和節(jié)點(diǎn),它們位于Functions→AllFunctions→FileI/O子模板中,如圖5-37所示。利用這些VI和節(jié)點(diǎn)可以進(jìn)行文件的打開(kāi)和關(guān)閉、文件的讀與寫(xiě)、創(chuàng)建新文件、刪除、移動(dòng)和拷貝文件,還可以執(zhí)行查看文件及目錄列表等一系列操作。
FileI/O子模板分為3個(gè)層次,即High-levelVIs、Low-levelVIs和AdvancedVIs。圖5-37FileI/O子模板
1.High-levelVIs在一般的操作中,High-levelVIs是最常用的文件I/O節(jié)點(diǎn),能夠基本滿(mǎn)足用戶(hù)的需求,可以分為電子表格讀/寫(xiě)、直接讀/寫(xiě)字符串及二進(jìn)制文件讀/寫(xiě)3種文件格式操作。
1)?WriteToSpreadsheetFile.vi
WriteToSpreadsheetFile.vi節(jié)點(diǎn)如圖5-38所示,該節(jié)點(diǎn)可以將數(shù)值組成的一維或者二維數(shù)組轉(zhuǎn)換成文本字符串,寫(xiě)入一個(gè)新建文件或已有文件。如果文件已經(jīng)存在,則用戶(hù)可以選擇把數(shù)據(jù)追加到原文件數(shù)據(jù)之后,也可以選擇覆蓋原文件;如果文件不存在,則創(chuàng)建新文件。該VI在寫(xiě)入數(shù)據(jù)之前會(huì)先打開(kāi)或者新建文件,寫(xiě)入完成后會(huì)關(guān)閉文件。該VI可以用于創(chuàng)建能夠被大多數(shù)電子表格軟件讀取的文本文件。圖5-38WriteToSpreadsheetFile.vi
filepath端口指明寫(xiě)入文件的路徑,可以直接輸入一個(gè)文件路徑(包括文件名)。如果指定的文件存在,則打開(kāi)該文件;如果不存在,則創(chuàng)建以該文件名命名的新文件。如果filepath的值為空或是非法的路徑,則在運(yùn)行時(shí)LabVIEW會(huì)彈出對(duì)話(huà)框,讓用戶(hù)選擇或創(chuàng)建文件。appendtofile端口確定是否在原有文件數(shù)據(jù)后追加寫(xiě)入數(shù)據(jù)。
【例5.4】使用WriteToSpreadsheetFileVI,將一個(gè)二維數(shù)組寫(xiě)入電子表格文件??驁D程序如圖5-39所示,將創(chuàng)建的2行4列的二維數(shù)組與WriteToSpreadsheetFileVI節(jié)點(diǎn)的2Ddata端口相連,appendtofile端口設(shè)置為T(mén)rue,運(yùn)行程序,選擇要寫(xiě)入數(shù)據(jù)的文件,則將二維數(shù)組寫(xiě)入已有文件中。圖5-39例5.4的數(shù)據(jù)文件和框圖程序
2)?ReadFromSpreadsheetFile.vi
ReadFromSpreadsheetFile.vi節(jié)點(diǎn)如圖5-40所示,該節(jié)點(diǎn)打開(kāi)一個(gè)電子表格文件,從數(shù)字文本文件中指定的字符偏移量開(kāi)始,讀取指定行數(shù)的數(shù)據(jù),并將這些數(shù)據(jù)轉(zhuǎn)換成一個(gè)二維的單精度數(shù)字型數(shù)組,讀完后關(guān)閉文件。注意,必須保證這個(gè)電子表格文件的所有字符串全部是由有效的數(shù)值字符組成。numbersofrows端口指定讀取的最多行數(shù),電子表格的一行是以一個(gè)回車(chē)符和一個(gè)換行符來(lái)結(jié)束的,如果這個(gè)值小于0,則該VI將讀取整個(gè)文件的數(shù)據(jù)。Markafterread指定讀取完畢后文件標(biāo)志所在的位置,它在最一個(gè)讀出的字符緊鄰的下一個(gè)字節(jié)處。圖5-40ReadFromSpreadsheetFile.vi
3)?WriteCharactersToFile.vi
WriteCharactersToFile.vi節(jié)點(diǎn)如圖5-41所示,該節(jié)點(diǎn)用于將一個(gè)從characterstring輸入的字符串寫(xiě)入一個(gè)文件。如果該文件不存在,則按指定路徑新建一個(gè)文件。該VI首先打開(kāi)或新建文件,然后寫(xiě)入數(shù)據(jù),最后關(guān)閉文件。
4)?ReadCharactersFromFile.vi
ReadCharactersFromFile.vi節(jié)點(diǎn)如圖5-42所示,該節(jié)點(diǎn)用于從某個(gè)文件的指定位置(startofreadoffset)開(kāi)始讀取指定個(gè)數(shù)(numbersofcharacters)的字符。注意,如果numbersofcharacters為-1,就讀取整個(gè)文件的數(shù)據(jù)。圖5-41WriteCharactersToFile.vi圖5-42ReadCharactersFromFile.vi
5)?ReadLinesFromFile.vi
ReadLinesFromFile.vi節(jié)點(diǎn)如圖5-43所示,該節(jié)點(diǎn)用于從某個(gè)文件的指定位置(startofreadoffset)開(kāi)始讀取指定行數(shù)(numberoflines)的行字符串。該VI打開(kāi)或新建文件,讀取數(shù)據(jù)后關(guān)閉文件。注意,若numberoflines小于0,則讀取整個(gè)文件的數(shù)據(jù)。
6)?BinaryFileVIs
BinaryFileVIs模板上包含能夠從二進(jìn)制文件中讀取或向二進(jìn)制文件中寫(xiě)入16比特(一個(gè)字)整數(shù)及單精度浮點(diǎn)數(shù)的VI。圖5-43ReadLinesFromFile.vi
2.Low-levelVIs所謂低層文件操作節(jié)點(diǎn)是指只具有單一文件操作功能的節(jié)點(diǎn)。基本的文件操作包括對(duì)文件進(jìn)行打開(kāi)、新建、讀、寫(xiě)以及關(guān)閉等。學(xué)習(xí)低層文件操作節(jié)點(diǎn)可以更好地了解基本的文件I/O操作過(guò)程。
1)?Open/Create/ReplaceFile.vi
Open/Create/ReplaceFile.vi節(jié)點(diǎn)如圖5-44所示,該節(jié)點(diǎn)用于打開(kāi)或替換一個(gè)已存在的文件,或者創(chuàng)建一個(gè)新文件。filepath端口用于指定被操作文件的路徑,如果該端口沒(méi)有連接,則運(yùn)行時(shí)VI會(huì)彈出一個(gè)文件對(duì)話(huà)框讓用戶(hù)指定。該節(jié)點(diǎn)的操作類(lèi)型(打開(kāi)、新建還是覆蓋)由function端口的參數(shù)值確定,其含義如下:
0:打開(kāi)一個(gè)已經(jīng)存在的文件,如果文件不存在則返回一個(gè)錯(cuò)誤代碼;
1:打開(kāi)一個(gè)文件,若不存在則創(chuàng)建一個(gè)新文件;
2:創(chuàng)建一個(gè)新文件或覆蓋一個(gè)已存在文件;
3:創(chuàng)建一個(gè)新文件,若與其他文件同名則返回一個(gè)錯(cuò)誤代碼。圖5-44Open/Create/ReplaceFile.vi
2)?ReadFile.vi
ReadFile.vi節(jié)點(diǎn)如圖5-45所示,該節(jié)點(diǎn)用于從已經(jīng)打開(kāi)的文件中讀取數(shù)據(jù),它讀取數(shù)據(jù)的位置由輸入?yún)?shù)posmode和posoffset決定,數(shù)據(jù)從data輸出。如果用戶(hù)連接了posoffset,則posmode默認(rèn)為0,此時(shí)posoffset是相對(duì)于文件開(kāi)始處的偏移量;如果用戶(hù)沒(méi)有連接posoffset,則默認(rèn)為2,此時(shí)操作從當(dāng)前的文件標(biāo)志(filemark)處開(kāi)始。posmode參數(shù)對(duì)應(yīng)的代碼含義如下:
0:開(kāi)始處,指從文件的開(kāi)始處加上posoffset后的位置開(kāi)始操作。如果posmode為0,則posoffset應(yīng)該為正數(shù);
1:結(jié)束處,指從文件的結(jié)束處加上posoffset后的位置開(kāi)始操作。如果posmode為1,則posoffset應(yīng)該為負(fù)數(shù);
2:當(dāng)前處,指從當(dāng)前文件標(biāo)志(filemark)處加上posoffset后的位置開(kāi)始操作。圖5-45ReadFile.vi
Linemode和count兩個(gè)參數(shù)決定讀取的數(shù)據(jù)量,其含義見(jiàn)表5.2。注意,輸入?yún)?shù)linemode僅在讀取文本文件時(shí)起作用,在讀取二進(jìn)制文件時(shí),不能連接此參數(shù)。
3)?WriteFile.vi
WriteFile.vi節(jié)點(diǎn)如圖5-46所示,該節(jié)點(diǎn)用于把數(shù)據(jù)寫(xiě)入到已經(jīng)打開(kāi)的文件中,寫(xiě)數(shù)據(jù)的位置由輸入?yún)?shù)posmode和posoffset決定,數(shù)據(jù)從data輸出。參數(shù)posmode和posoffset的含義與ReadFile.vi的含義基本一致。表5.2由linemode和count決定的讀文本文件數(shù)據(jù)的方式圖5-46WriteFile.vi
4)?CloseFile.vi
CloseFile.vi節(jié)點(diǎn)如圖5-47所示,該節(jié)點(diǎn)可以關(guān)閉refnum所指的文件。注意,ErrorI/O對(duì)該VI來(lái)說(shuō)是單獨(dú)操作的,所以無(wú)論errorin中是否有錯(cuò)誤信息輸入(即前面的操作是否有錯(cuò)誤產(chǎn)生),該VI都會(huì)執(zhí)行關(guān)閉文件操作。這樣能夠保證文件總是被正確關(guān)閉。關(guān)閉一個(gè)文件要進(jìn)行的步驟如下:
(1)把在緩沖區(qū)里的文件數(shù)據(jù)寫(xiě)入物理存儲(chǔ)介質(zhì)中;
(2)更新文件列表信息,如文件最后修改的日期等;
(3)釋放refnum。圖5-47CloseFile.vi
3.AdvancedVIs在AdvancedFileFunctions子模板上包含很多文件操作節(jié)點(diǎn),這里介紹常用的一些節(jié)點(diǎn)。
1)打開(kāi)文件(OpenFile)
OpenFile節(jié)點(diǎn)如圖5-48所示,該節(jié)點(diǎn)是打開(kāi)文件操作最基本的一個(gè)節(jié)點(diǎn),既可以用來(lái)打開(kāi)文本文件和二進(jìn)制文件,也可以打開(kāi)數(shù)據(jù)記錄文件。一個(gè)文件打開(kāi)后,后續(xù)的程序可以用這個(gè)節(jié)點(diǎn)返回的標(biāo)識(shí)號(hào)對(duì)這個(gè)文件進(jìn)行操作。
datalogtype端口:當(dāng)該端口有數(shù)據(jù)連線(xiàn)時(shí),表明打開(kāi)的是一個(gè)數(shù)據(jù)記錄文件,反之默認(rèn)為文本文件或二進(jìn)制文件。openmode(0)端口定義了打開(kāi)文件的方式。當(dāng)openmode=0時(shí),可以對(duì)打開(kāi)的文件進(jìn)行讀/寫(xiě)操作;當(dāng)openmode=1時(shí),只能對(duì)打開(kāi)的文件進(jìn)行讀操作,而不能進(jìn)行修改。如果文件不存在,則返回一個(gè)錯(cuò)誤代碼。圖5-48OpenFile
denymode(2)端口用于設(shè)定其他用戶(hù)同時(shí)操作文件的權(quán)限。如果為0,則禁止其他用戶(hù)與當(dāng)前用戶(hù)同時(shí)讀或?qū)懳募?;如果?,則禁止其他用戶(hù)在同一時(shí)間對(duì)此文件執(zhí)行寫(xiě)操作;如果為2,則允許其他用戶(hù)與當(dāng)前用戶(hù)同時(shí)讀/寫(xiě)文件。
2)創(chuàng)建新文件(NewFile)
NewFile節(jié)點(diǎn)如圖5-49所示,該節(jié)點(diǎn)用于創(chuàng)建一個(gè)新文件,并使之處于打開(kāi)狀態(tài),以備讀/寫(xiě)。datalogtype可以連接任何數(shù)據(jù)類(lèi)型,但是,當(dāng)這個(gè)輸入端口有數(shù)據(jù)連線(xiàn)時(shí),說(shuō)明創(chuàng)建的文件是數(shù)據(jù)記錄文件。denymode(2)端口的設(shè)置方法同OpenFile節(jié)點(diǎn)。如果輸入的文件已經(jīng)存在,且參數(shù)overwrite為T(mén)rue時(shí),則覆蓋該輸入文件;如果overwrite為False,則返回一個(gè)錯(cuò)誤代碼。圖5-49NewFile
3)清空文件緩沖區(qū)(FlushFile)與C語(yǔ)言文件操作一樣,當(dāng)向文件寫(xiě)數(shù)據(jù)時(shí),數(shù)據(jù)是先存放在一個(gè)緩沖區(qū)里而不是直接寫(xiě)入物理存儲(chǔ)介質(zhì)的,只有當(dāng)緩沖區(qū)滿(mǎn)或文件關(guān)閉時(shí)才執(zhí)行真正的物理寫(xiě)操作,這樣可以減少對(duì)磁盤(pán)的操作頻率并提高文件讀寫(xiě)速度。FlushFile節(jié)點(diǎn)(如圖5-50所示)強(qiáng)迫緩沖區(qū)的數(shù)據(jù)寫(xiě)入到物理存儲(chǔ)器中,但它并不關(guān)閉文件。
4)刪除文件(Delete.vi)
Delete.vi節(jié)點(diǎn)如圖5-51所示,該節(jié)點(diǎn)用于刪除由path輸入的文件或目錄。如果一個(gè)目錄為空或用戶(hù)沒(méi)有寫(xiě)文件權(quán)限,則刪除操作無(wú)效,且errorout返回一個(gè)錯(cuò)誤代碼。圖5-50FlushFile圖5-51Delete.vi
5)移動(dòng)文件(Move.vi)
Move.vi節(jié)點(diǎn)如圖5-52所示,該節(jié)點(diǎn)用于把一個(gè)文件從源位置(sourcepath)移到目標(biāo)位置(targetpath)。操作完成后,原文件被刪除。
6)復(fù)制文件(Copy.vi)
Copy.vi節(jié)點(diǎn)如圖5-53所示,該節(jié)點(diǎn)用于把文件從源位置復(fù)制一份到目標(biāo)位置,即進(jìn)行一個(gè)文件拷貝,操作完成后,原文件仍存在。圖5-52Move.vi圖5-53Copy.vi5.2.2電子表格文件的輸入/輸出
LabVIEW提供了兩個(gè)VI用于存儲(chǔ)和讀取電子表格文件,分別是WriteToSpreadsheetFile.vi和ReadFromSpreadsheetFile.vi。
【例5.5】電子表格文件的輸入。
VI的程序框圖如圖5-54所示,該程序在e盤(pán)新建了名為new.xls的文件,并將For循環(huán)產(chǎn)生的正弦和余弦數(shù)據(jù)存儲(chǔ)到該文件中。用MicrosoftExcel打開(kāi)這個(gè)文件,可以發(fā)現(xiàn)文件中有兩行,第一行是余弦數(shù)據(jù),第二行是正弦數(shù)據(jù)。
【例5.6】電子表格文件的輸出。
VI的程序框圖如圖5-55所示,用ReadFromSpreadsheetFile.vi讀取例5.5中存儲(chǔ)的文件。需要注意的是:ReadFromSpreadsheetFile.vi默認(rèn)的讀取數(shù)據(jù)定位符號(hào)是TAB,如果在寫(xiě)電子表格時(shí)用了其他的定位符號(hào),需要在ReadFromSpreadsheetFile.vi的delimiter數(shù)據(jù)端口加以設(shè)置。圖5-54例5.5的程序框圖圖5-55例5.6的程序框圖5.2.3文本文件的輸入/輸出文本文件是一種以ASCII形式存儲(chǔ)數(shù)據(jù)的文件格式,它存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)類(lèi)型為字符串。在LabVIEW中,對(duì)文本文件的存取是通過(guò)WriteCharactersToFile.vi和ReadCharactersFromFile.vi來(lái)完成的。由于寫(xiě)文本文件操作的對(duì)象是以字符串形式存儲(chǔ)的數(shù)據(jù),因而在用WriteCharactersToFile.vi將數(shù)據(jù)存儲(chǔ)到文本文件前要先將數(shù)據(jù)轉(zhuǎn)換為字符串。
【例5.7】WriteCharactersToFile.vi的使用。
VI的程序框圖如圖5-56所示,該程序使用了For循環(huán)結(jié)構(gòu)和堆疊的順序結(jié)構(gòu),調(diào)用FormatIntoString節(jié)點(diǎn)將正弦數(shù)據(jù)轉(zhuǎn)換為字符串,并保留兩位的精度。運(yùn)行程序,可以在e盤(pán)找到名為new.dat的數(shù)據(jù)文件,用Windows的記事本程序打開(kāi),記事本中會(huì)顯示100個(gè)正弦數(shù)據(jù),每個(gè)數(shù)據(jù)精確到小數(shù)點(diǎn)后有兩位。圖5-56例5.7的程序框圖用MicrosoftExcel打開(kāi)這個(gè)數(shù)據(jù)文件,繪制波形,如圖5-57所示。通過(guò)這個(gè)例子說(shuō)明,電子表格文件實(shí)質(zhì)是一種特殊的文本文件。
【例5.8】ReadCharactersFromFile.vi的使用。
VI的程序框圖如圖5-58所示,將例5.7產(chǎn)生的new.dat數(shù)據(jù)文件讀出來(lái),運(yùn)行程序,new.dat文件中的數(shù)據(jù)以字符串的格式讀出,并作為一個(gè)字符串來(lái)存儲(chǔ)。圖5-57用存儲(chǔ)的文本文件中的正弦數(shù)據(jù)在Excel中繪圖圖5-58例5.8的程序框圖由以上的例子可以看出,ASCII文件的特點(diǎn)是:
(1)無(wú)論讀還是寫(xiě)都需要進(jìn)行數(shù)據(jù)轉(zhuǎn)換。數(shù)據(jù)轉(zhuǎn)換是需要時(shí)間的,特別是當(dāng)數(shù)據(jù)塊比較大的情況。因此,在數(shù)據(jù)采集速率較高的場(chǎng)合,不宜使用ASCII碼文件存儲(chǔ)數(shù)據(jù)。如果數(shù)據(jù)采集速率很高,寫(xiě)文件不及時(shí),則會(huì)產(chǎn)生數(shù)據(jù)丟失現(xiàn)象,即數(shù)據(jù)文件只記錄了部分?jǐn)?shù)據(jù)。
(2)體積大。在ASCII碼文件中,一個(gè)字符要占用一個(gè)字節(jié)空間,比較浪費(fèi)。比如,一個(gè)擁有10個(gè)數(shù)字的整數(shù),在ASCII碼文件中要占用10個(gè)字節(jié),而在內(nèi)存中表示這個(gè)整數(shù)只需要兩個(gè)字節(jié)而已。ASCII碼文件的可讀性是以犧牲磁盤(pán)空間為代價(jià)的。在數(shù)據(jù)采集速率較高的情況下,宜使用二進(jìn)制文件。5.2.4二進(jìn)制文件的輸入/輸出二進(jìn)制文件體積小,在存儲(chǔ)時(shí)不需要數(shù)據(jù)轉(zhuǎn)換,尤其適合于數(shù)據(jù)量巨大,數(shù)據(jù)采集速率高的場(chǎng)合。二進(jìn)制文件的輸出需要注意兩點(diǎn):一是計(jì)算數(shù)據(jù)量;二是必須知道存儲(chǔ)文件時(shí)使用的數(shù)據(jù)類(lèi)型。
【例5.9】二進(jìn)制文件的輸入。
VI的前面板和程序框圖如圖5-59所示,使用NewFile.vi創(chuàng)建一個(gè)新文件,通過(guò)While循環(huán)采集數(shù)據(jù)并將數(shù)據(jù)寫(xiě)入文件。信號(hào)源是一個(gè)隨機(jī)數(shù)產(chǎn)生器,通過(guò)For循環(huán)將隨機(jī)數(shù)組成數(shù)組,在存儲(chǔ)數(shù)據(jù)時(shí),是將雙精度數(shù)組數(shù)據(jù)直接寫(xiě)入文件的,而沒(méi)有經(jīng)過(guò)數(shù)據(jù)轉(zhuǎn)換,因此,寫(xiě)二進(jìn)制文件的速度很快。圖5-59例5.9的前面板和程序框圖
【例5.10】二進(jìn)制文件的輸出。
VI的前面板和程序框圖如圖5-60所示,該例是安裝LabVIEW后自帶的例程,用戶(hù)可以按照路徑examples\file\smplfile.llb\ReadBinaryFileVI找到該VI。該程序由3部分組成:
(1)選擇要讀取的文件并打開(kāi)。使用的VI是FileDialog和OpenFile。
(2)利用EOF.vi計(jì)算文件長(zhǎng)度,并根據(jù)所使用的數(shù)據(jù)類(lèi)型的長(zhǎng)度計(jì)算出數(shù)據(jù)量,本例中的數(shù)據(jù)類(lèi)型為雙精度數(shù)據(jù),每個(gè)雙精度數(shù)據(jù)占用8個(gè)字節(jié),所以數(shù)據(jù)量等于文件長(zhǎng)度除以8。使用ReadFile.vi讀取數(shù)據(jù)時(shí),必須指定數(shù)據(jù)類(lèi)型,方法是將所需類(lèi)型的數(shù)據(jù)連接到ReadFile.vi的datalogtype端口。
(3)關(guān)閉文件并檢查可能產(chǎn)生的錯(cuò)誤。使用的VI是CloseFile和SimpleErrorHandler.vi。圖5-60例5.10的前面板和程序框圖5.2.5數(shù)據(jù)記錄文件的使用前面介紹的文件輸入/輸出都是針對(duì)存取的數(shù)據(jù)是單一數(shù)據(jù)類(lèi)型的情況,數(shù)據(jù)類(lèi)型是字符型或數(shù)值型,但是當(dāng)要存儲(chǔ)和讀取不同數(shù)據(jù)類(lèi)型的數(shù)據(jù)時(shí),文件的存儲(chǔ)和讀取將變得非常復(fù)雜,文件的輸入和輸出要耗費(fèi)大量的時(shí)間作各種數(shù)據(jù)類(lèi)型轉(zhuǎn)換。為此,LabVIEW提供了一種被稱(chēng)為數(shù)據(jù)記錄(datalog)類(lèi)型的文件格式來(lái)解決存儲(chǔ)不同類(lèi)型數(shù)據(jù)問(wèn)題。數(shù)據(jù)記錄文件存儲(chǔ)數(shù)據(jù)的方法與數(shù)據(jù)庫(kù)文件相似,是把數(shù)據(jù)作為由相同結(jié)構(gòu)的記錄組成的一個(gè)序列來(lái)保存。每一行是一個(gè)記錄(record),每一個(gè)記錄都必須含有相同的數(shù)據(jù)結(jié)構(gòu)。LabVIEW把每一個(gè)記錄作為一個(gè)簇寫(xiě)入文件,記錄的每一個(gè)組成元素可以是任何類(lèi)型的數(shù)據(jù),這由用戶(hù)在創(chuàng)建文件時(shí)決定。使用數(shù)據(jù)記錄文件只需要極少量的操作,這使讀取和寫(xiě)入速度非??臁K€簡(jiǎn)化了數(shù)據(jù)獲取的方式,因?yàn)長(zhǎng)abVIEW創(chuàng)建數(shù)據(jù)記錄文件時(shí),會(huì)按順序給各個(gè)記錄指定一個(gè)recordnumber,用戶(hù)可以根據(jù)r
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度2月醫(yī)療DRG分組算法優(yōu)化技術(shù)服務(wù)協(xié)議
- 吉他日常訓(xùn)練基本功
- 二零二五出租房屋補(bǔ)充協(xié)議
- 二零二五版外賣(mài)送餐合同
- (安徽專(zhuān)用)中考?xì)v史真題匯編:綜合材料題- 5年(2020-2024)中考真題+1年模擬真題匯編
- 中醫(yī)藥行業(yè)分析
- 血液中心培訓(xùn)管理制度
- 鐵路檢修工段管理制度
- 項(xiàng)目實(shí)施管理制度樣本
- 科技公司崗位職責(zé)
- 小學(xué)創(chuàng)客課件智能臺(tái)燈
- 地勘查單位安全標(biāo)準(zhǔn)化規(guī)范鉆探工程
- 中國(guó)公民健康素養(yǎng)66條課件
- Access2016數(shù)據(jù)庫(kù)應(yīng)用技術(shù)教程
- 2024安全與韌性術(shù)語(yǔ)
- 腳手架工程安全管理風(fēng)險(xiǎn)辨識(shí)及防范措施
- 縣文工團(tuán)組建方案
- 胸腹主動(dòng)脈瘤切除人工血管置換術(shù)術(shù)前宣教
- 固定式起重機(jī)每月定期檢查表
- 光的直線(xiàn)傳播-說(shuō)課
- 山東省青島市市北區(qū)2023-2024學(xué)年九年級(jí)上學(xué)期11月期中數(shù)學(xué)試題
評(píng)論
0/150
提交評(píng)論