Scripting.TextStream對象

來源:互聯網
上載者:User
stream|對象


     FileSystemObject、Folder和File對象的一些方法都與通過TextStream對象建立、讀取或寫入檔案有關。
     雖然TextStream對象定義為FileSystemObject對象的一個獨立的附屬對象,但我們不得不使用FileSystemObject對象或其附屬對象來建立一個TextStream對象並訪問磁碟檔案的內容。

5.5.1 建立TextStream對象的方法
       有三個常用方法用於建立或開啟一個文字檔並返回TextStram對象,如表5-13所示:
表5-13  建立TextStream對象的方法及說明
方 法
說 明

CreateTextFile
(filename,overwrite,unicode)
在磁碟上用指定的檔案名稱filename建立一個新文字檔,並返回一個與該檔案對應的TextStream對象。如果可選的overwrite參數設定為True,將覆蓋具有同樣路徑的同名檔案。預設的overwrite是False。如果可選的unicode參數設定為False,該檔案的內容將儲存為Unicode格式。預設的unicode是False

OpenTextFile
(filename,iomode,create,format)
開啟或建立(如果不存在)一個名為filename的檔案,並且返回與該檔案對應的TextStream對象。filename參數可以包含絕對或相對路徑。iomode參數說明需要的訪問類型。容許值是ForReading(1)(預設)、ForWriting(2)、ForAppending(8)。寫入或追加到一個不存在的檔案時,如果create參數設定為True,將建立一個新檔案。預設的create是False。format參數說明了讀或寫檔案時的資料格式。容許值是TristateFalse(0)(預設),說明用ASCII資料格式;TristateTrue(-1)說明用Unicode資料格式;TristateUseDefault(-2)說明資料使用系統預設的格式

OpenAsTextStream
(iomode,format)
開啟一個指定的檔案並且返回一個TextStream對象,可用於對該檔案的讀、寫或追加。iomode參數說明了需要的訪問類型。容許值是ForReading(1)(預設)、ForWriting(2)、ForAppending(8)。Format參數說明了讀寫檔案的資料格式。容許值是TristateFalse(0)(預設),說明用ASCII資料格式;TristateTrue(-1)說明用Unicode資料格式;TristateUseDefault(-2)說明使用系統預設的格式

       上面列出的方法在FileSystemObject、Folder和File對象中的實現有所不同。如表5-14所示:
表5-14  三個對象中包含的方法
方 法
FileSystemObject對象
Folder對象
File對象

CreateTextFile




OpenTextFile




OpenAsTextStream




       因此,可以使用這些方法建立一個新的文字檔,或者開啟一個已存在的檔案。則可得到與該檔案相應的一個TextStream對象,可以使用TextStream對象的屬性和方法操作檔案。
1.  建立新的文字檔
可以用CreateTextFile方法建立新的文字檔,或覆蓋一個已存在的檔案。返回的TextStream對象可用來讀寫檔案。
首先建立一個FileSystemObject對象,用來建立TextStream對象。下面這個例子是用VBScript建立一個“普通的”(即非Unicode)名為MyFile.txt的檔案,並覆蓋已存在的同名檔案:
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objTStream = objFSO.CreateTextFile("C:TextFilesMyFile.txt", True, False)
這同樣可用JScript實現:
var objFSO = Server.CreateObject('Scripting.FileSystemObject');
var objTStream = objFSO.CreateTextFile('C:TextFilesMyFile.txt', true, false);
一旦建立了該檔案,就可以使用objTStream(它是對一個TextStream對象的引用)對檔案進行操作。
2.  開啟已存在的文字檔
OpenTextFile方法用於開啟一個已有的文字檔。它返回一個TextStream對象,可用這個對象對檔案讀或追加資料。
同樣,首先建立一個FileSystemObject對象,然後用其建立一個TextStream對象。下面的VBScript程式例子開啟一個名為MyFile.txt的檔案,準備讀出其內容:
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objTStream = objFSO.OpenTextFile("C:TextFilesMyFile.txt", ForReading)
用JScript:
var objFSO = Server.CreateObject('Scripting.FileSystemObject');
var objTStream = objFSO.OpenTextFile('C:TextFilesMyFile.txt', ForReading);
為了寫入一個檔案或建立一個不存在的檔案,可以用以下代碼:
' In VBScript:
Set objTStream = objFSO.OpenTextFile("C:TextFilesMyFile.txt", ForWriting, True)

// In JScript:
var objTStream = objFSO.OpenTextFile('C:TextFilesMyFile.txt', ForWriting, true);
如果要開啟一個已有的Unicode檔案,準備對其追加資料,但是不建立不存在的檔案,可以用:
' In VBScript:
Set objTStream = objFSO.OpenTextFile("C:TextFilesMyFile.txt", ForReading, _
                                                                      False, TristateTrue)
// In JScript:
var objTStream = objFSO.OpenTextFile('C:TextFilesMyFile.txt', ForReading, _
fasle, TristateTrue);
3.  作為一個TextStream對象開啟一個File對象
可用File對象的OpenAsTextStream方法開啟與該對象相應的檔案,並且返回一個能對該檔案進行讀、寫和追加的TextStream對象。所以,給定一個File對象(這種情況下不是FileSystemObject對象)——objFileObject,可作為一個“普通的”(非Unicode)TextStream對象開啟它,以供追加檔案內容:
' In VBScript:
Set objTStream = objFileObject.OpenAsTextStream(ForAppending, False)

// In JScript:
var objTStream = objFileObject.OpenTextFile(ForAppending, false);
注意,使用這種方法不需要檔案名稱,因為程式的執行通過引用File對象進行,並且沒有create參數,因為該檔案必須已存在,如果想從一個新的空的檔案開始,可以用:
' In VBScript:
Set objTStream = objFileObject.OpenAsTextStream(ForWriting)

// In JScript:
var objTStream = objFileObject.OpenTextFile(ForWriting);
如果想讀取該檔案:
' In VBScript:
Set objTStream = objFileObject.OpenAsTextStream(ForReading)

// In JScript:
var objTStream = objFileObject.OpenTextFile(ForReading);

5.5.2 TextStream對象成員概要
       表5-15和表5-16是TextStream對象的全部屬性和方法的列表。下面將簡短介紹各個重要的成員的細節。
1.  TextStream對象的屬性
TextStream的屬性提供有關檔案內檔案指標當前位置的資訊,如表5-15所示。注意,所有的屬性是唯讀。
表5-15  TextStream對象的屬性及說明
屬 性
說 明

AtEndOfLine
如果檔案位置指標在檔案中一行的末尾則返回True

AtEndOfStream
如果檔案位置指標在檔案的末尾則返回True

Column
從1開始返迴文件中當前字元的列號

Line
從1開始返迴文件中當前行的行號

       AtEndOfLine和AtEndOfStream屬性僅對以iomode參數為ForReading的方式開啟的檔案可用,否則將會出錯。
2.  TextStream對象的方法
TextStream對象的方法如表5-16所示:
表5-16  TextStream對象的方法及說明
方 法
說 明

Close()
關閉一個開啟的檔案

Read(numchars)
從檔案中讀出numchars個字元

ReadAll()
作為單個字串讀出整個檔案

ReadLine()
作為一個字串從檔案中讀出一行(直到斷行符號符和換行)

Skip(numchars)
當從檔案讀出時忽略numchars個字元

SkipLine()
當從檔案讀出時忽略下一行

Write(string)
向檔案寫入字串string

WriteLine(string)
向檔案寫入字串string(可選)和分行符號

WriteBlankLines(n)
向檔案寫入n個分行符號

3.  寫文字檔
一旦使用CreateTextFile、OpenTextFile或OpenAsTextStream方法以及ForWriting或ForAppending參數,建立一個對應於某個檔案的TextStream對象,可以用下面的VBScript程式寫檔案和關閉檔案:
' In VBScript:
objTStream.WriteLine "At last I can create files with VBScript!"
objTStream.WriteLine
objTStream.WriteLine "Here are three blank lines:"
objTStream.WriteBlankLines 3
objTStream.Write "... and this is "
objTStream.WriteLine "the last line."
objTStream.Close
或者用JScript:
// In JScript:
objTStream.WriteLine('At last I can create files with JScript! ');
objTStream.WriteLine();
objTStream.WriteLine('Here are three blank lines: ');
objTStream.WriteBlankLines(3);
objTStream.Write('... and this is ');
objTStream.WriteLine('the last line. ');
objTStream.Close();
4.  讀文字檔
一旦使用CreateTextFile、OpenTextFile或OpenAsTextStream方法以及ForReading參數,建立一個對應於某個檔案的TextStream對象,可以用下面的VBScript程式讀檔案和關閉檔案:
' In VBScript:
'read one line at a time until the end of the file is reached
Do While Not objTStream.AtEndOfStream
   'get the line number
   intLineNum = objTStream.Line
   'format it as a 4-character string with leading zeros
   strLineNum = Right("000" & CStr(intLineNum), 4)
   'get the text of the line from the file
   strLineText = objTStream.ReadLine
   Response.Write strLineNum & ": " & strLineText & "<BR>"
Loop
objTStream.Close
或用JScript:
// In JScript:
// read one line at a time until the end of the file is reached
while (! objTStream.AtEndOfStream) {
   // get the line number
   intLineNum = objTStream.Line;
   // format and convert to a string
   strLineNum = '000' + intLineNum.toString();
   strLineNum = substr(strLineNum, strLineNum.length – 4, 4)
   // get the text of the line from the file
   strLineText = objTStream.ReadLine();
   Response.Write(strLineNum + ': ' + strLineText + '<BR>');
}
objTStream.Close();

5.5.3 TextStream對象舉例
       為了瞭解使用TextStream對象操作磨滅檔案的幾種方式,本書提供了一個VBScript樣本頁面,該頁使用了大量的上述的代碼。從樣本的Chapter05主菜單頁,選擇連結“Working With the TextStream Object”開啟show_textstream.asp頁面。
       該頁顯示了儲存在磁碟上名為MyFile.txt的檔案的常值內容。在<TEXTAREA>控制項裡顯示的常值內容允許進行編輯,並且下面有三個按鈕。三個按鈕的作用分別是用<TEXTAREA>控制項的內容更新(即取代)最初的文本,在已有檔案內容的後面添加文本,或用初始的預設內容重寫檔案,如圖5-15所示:

1.  讀取已存在的文字檔的內容
每次載入該頁面,將開啟文字檔並將讀取的內容置入<TEXTAREA>控制項。注意我們如何使用Server.MapPath方法得到檔案MyFile.txt的絕對實體路徑,該檔案與樣本頁面在同一目錄下。下面的程式建立FileSystemObject執行個體:
<%
strTextFile = Server.MapPath("MyFile.txt")

'create an instance of a FileSytemObject object
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")

與書中本部分的大多數其他樣本一樣,該頁包含一個<FORM>段以儲存該頁面的HTML控制項。ACTION是當前頁面,因此表單的內容送回到同一頁面。
每次載入該頁面,<TEXTAREA>控制項用文字檔的當前內容填充:

<FORM ACTION="<% = Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST">

The contents of the disk file <B><% = strTextFile %></B> are:<P>
<TEXTAREA NAME="txtContent" ROWS="10" COLS="50" WRAP="PHYSICAL">
<%
'open the text file as a TextStream object
Set objTStream = objFSO.OpenTextFile(strTextFile, ForReading)
'read one line at a time until the end of the file is reached
Do While Not objTStream.AtEndOfStream
   'get the line number
   intLineNum = objTStream.Line
   'format and convert to a string
   strLineNum = Right("00" & CStr(intLineNum), 3)
   'get the text of the line from the file
   strLineText = objTStream.ReadLine
   Response.Write strLineNum & ": " & strLineText & vbCrLf
Loop
objTStream.Close
%>
</TEXTAREA><P>
由上面程式可知道如何開啟文字檔進行讀取,遍曆整個檔案每次讀取一行(而不是作為一個字串讀出整個檔案)。這是因為要添加自己的行號,行號不屬於該檔案的文本。對從該檔案讀出的每行(讀之前),檢索並且格式化Line屬性並建立一個三位元字的行號。然後把行編號和文本行放置頁面的<TEXTAREA>控制項內。
2.  更新文字檔的內容
當點擊頁面的Update按鈕時(一般是在編輯了<TEXTAREA>控制項裡的文本以後),將把<TEXTAREA>控制項裡的內容重新寫入到該文字檔內。為此,該頁有相應的一些ASP代碼,在建立HTML控制項以前檢驗Request.Form集合,查看點擊的是哪一個按鈕(如果有的話),然後就重新載入該頁。
如果點擊Update按鈕,搜集<TEXTAREA>控制項的內容作為一個字串,分離這個字串使之成為獨立文本選擇的數組,並且開啟文字檔準備重寫其內容,然後遍曆剛剛建立的數組,按行號迴圈寫入該行的內容:

'look for a command sent from the FORM section buttons
If Len(Request.Form("cmdUpdate")) Then
  'Get contents of TEXTAREA control
  strNewText = Request.Form("txtContent")
  'Split it into an array of lines at each carriage return
  arrLines = Split(strNewText, vbCrLf)
  'Open the text file for writing, which replaces all existing content
  Set objTStream = objFSO.OpenTextFile(strTextFile, ForWriting)
  For intLine = 0 To UBound(arrLines)
    strThisLine = arrLines(intLine)
       'Write out each line in turn as long as it’s got a line number
    If Len(strThisLine) > 4 Then objTStream.WriteLine Mid(strThisLine, 6)
  Next
  objTStream.Close
End If

HTML<TEXTAREA>控制項可在返回的Value中增加額外字元,這依賴於原始HTML頁內的內容格式和WRAP屬性的設定。特別是應在ASP指令碼結束定界符“%>”後立即寫上</TEXTAREA>標記,以防止增加一個額外的斷行符號符號。即使用:
%></TEXTAREA><p>
而不使用:
%>
</TEXTAREA><P>
3.  向文字檔追加內容
當點擊Append按鈕時,可對已有的檔案追加內容,與修改該檔案內容類別似,如圖5-16所示。區別是開啟該檔案是為了追加而不是為了改寫檔案。調用OpenTextFile方法時可增加額外參數,防止在指定的檔案2不存在時建立新檔案。

If Len(Request.Form("cmdAppend")) Then
  'append contents of TEXTAREA to file
  strNewText = Request.Form("txtContent")
  arrLines = Split(strNewText, vbCrLf)
  Set objTStream = objFSO.OpenTextFile(strTextFile, ForAppending, False)
  For intLine = 0 To UBound(arrLines)
    strThisLine = arrLines(intLine)
    If Len(strThisLine) > 4 Then objTStream.WriteLine Mid(strThisLine, 6)
  Next
  objTStream.Close
End If



4.    重寫預設內容
最後,Restore按鈕用來將初始預設內容簡單地重寫迴文本檔案。代碼與用TextStream的方法寫一個文字檔類似:

If Len(Request.Form("cmdDefault")) Then
  'write out default contents to file
  Set objTStream = objFSO.CreateTextFile(strTextFile, True, False)
  objTStream.WriteLine "At last I can create files with VBScript!"
  objTStream.WriteLine
  objTStream.WriteLine "Here are three blank lines:"
  objTStream.WriteBlankLines 3
  objTStream.Write "... and this is "
  objTStream.WriteLine "the last line."
  objTStream.Close
End If

5.6 小結
       本章講述了在ASP頁面中使用對象和組件的強大能力。首先討論對象和組件的一般特性,以及它們的類型。然後集中論述了如何在ASP(及用戶端)指令碼代碼內建立對象執行個體。
       在頁面上使用的許多個物件可能都是“外部”組件,這些組件安裝在伺服器上,獨立於ASP。本章所討論的對象,當ASP使用一種預設的指令碼語言(如VBScript或JScript)時,總是可用的。其實現是通過scrrun.dll檔案裡的指令碼運行期庫完成的。
       這些對象是指Dictonary對象、FileSystemObject對象和TextStream對象。
       Dictionary對象為我們提供了儲存值的一種有效方式,可根據名字進行索引和訪問,而不是根據一個數字進行訪問。這是儲存名字/值對這樣的資料的理想方式。
       FileSystemObject對象和TextStream對象相互之間聯絡密切,可使用它們訪問伺服器或網路(映射)的磁碟機的目錄。FileSystemObject對象提供對磁碟機、檔案夾(目錄)和檔案的存取,並提供了用於對於獲得更多的資訊或移動、複製、刪除它們的屬性及方法。
       可以建立對應於系統內的任何檔案的TextStream對象,並通過該對象對檔案進行讀取和寫入。對於讀寫過程它作為文字檔操作,甚至可以處理Unicode格式的檔案。對檔案系統的導航和讀寫能力的結合允許對伺服器檔案系統進行極其複雜的控制。還可以在用戶端指令碼代碼中使用對象(有一定限制)。




相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。