iT邦幫忙

0

vb2012 讀文字檔

clcy 2014-05-22 18:17:465090 瀏覽

各位先進大家好,小弟很久沒寫程式了,最近想使用VS2012來寫一支抓資料夾下所有 txt檔裡,解析內容的小程式來協助工作,但是有點問題,以下是程式在讀檔的程式碼:

Dim sr As System.IO.StreamReader
'抓出檔案的資訊
thisfile = My.Computer.FileSystem.GetFileInfo(filepath)
'讀取檔案
sr = My.Computer.FileSystem.OpenTextFileReader(filepath)

Do While sr.Peek > -1
AAA= getUnitSN(sr.ReadLine())
If AAA <> "" Then Exit Do
Loop

讀的文字檔內容大都是
AAA:123
BBB:456
CCC:789
DDD:012
一次約讀400~600個文字檔,但有些固定的檔案就是會漏掉CCC 或DDD,或是讀出來變 012AAA(最後
併到前面的文字)
請問,是用錯方式來了嗎?? 或是有先進有其它比好的方式??
另外,請問如果要封成setup檔給另一台電腦使用或是單一個exe檔,目前看來只有installshield LE,的版本,但是...小弟之前用的是VB6啊,請問有什麼教學可以看嗎? (GOOGLE了一些網站,但還是作不起來最好的狀況是封裝好SETUP檔,但是安裝時會出現 "無法建置可轉散發檔案 '<file>'"。

謝謝大家。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
丹尼爾
iT邦研究生 2 級 ‧ 2014-05-23 00:18:04
最佳解答

試試這樣看看吧..

&lt;pre class="c" name="code">
While Not sr.EndOfStream
     AAA= getUnitSN(sr.ReadLine())
     If AAA &lt;> "" Then Exit While
End While

從 Visual Studio 2012 開始,微軟就移除掉「安裝專案」(Setup Project) 這個範本,只剩下 ClickOne 的方式,或是使用 Install Shield LE 來製作安裝檔。

如果要使用 Visual Studio Installer 的話就必需要安裝 VS2010 或是新版的 VS013 + 擴充套件 (Setup Project) 專案範本 就可以製作安裝檔了。

VS2010 部署與安裝的說明與介紹
http://blog.e-happy.com.tw/?p=236

clcy iT邦新手 3 級 ‧ 2014-05-26 16:51:38 檢舉

多謝指教,有問題的筆數少了很多,但還是有出現一、兩筆。
想請教有沒有什麼其它的原因可能導致這個狀況發生呢?
本來想是否有可能是特殊符號導致的,但是丟到notepad++裡去看是沒有的。

會是streamreader讀進去時的問題嗎?? 我在第一次讀進去時就用了richtextbox把streamreader裡的資料讀出來,也沒有發現異狀,但是在用getUnitSN去取sr.readline時就會有這個問題。

getUnitSN我寫的是

&lt;pre class="c" name="code">
    Private Function getUnitSN(ByVal strTxt As String) As String
        '找出Control Unit:的行,再把之後的SN帶進去
        If InStr(1, strTxt, "Item Unit:") &lt;> 0 Then
            getUnitSN = Trim(Mid(strTxt, InStr(1, strTxt, ":") + 1))
            Exit Function
        End If
        '沒有的話就清空變數
        getUnitSN = ""
    End Function

請各位先進指教...

謝謝。

丹尼爾 iT邦研究生 2 級 ‧ 2014-05-27 13:31:32 檢舉

還是在你開檔時加上 encoding type

&lt;pre class="c" name="code">
sr = My.Computer.FileSystem.OpenTextFileReader(filepath, System.Text.Encoding.GetEncoding(950))

另外 getUnitSN 改寫成這樣試試..

&lt;pre class="c" name="code">
Private Function getUnitSN(ByVal strTxt As String) As String
    If strTxt.ToUpper.StartsWith("ITEM UNIT:") Then
        Return strTxt.Split(":")(0).Trim
    Else
        Return ""
    End If
End Function

如果還會有一樣的狀況發生,那麼就要用 UltraEdit 或是 HexEdit 去看看那個文字檔,在發生錯誤的那幾行的結尾部分是不是只有 &h0A 而不是 &h0D &h0A。

我要發表回答

立即登入回答