none
Split切割遇到問題 RRS feed

  • 問題

  • 

    如上圖所示 我以split切割區塊 號碼為temp(0),姓名為temp(1),國文為temp(2),數學為temp(3),英文為temp(4)

    那當我load到號碼七號時 因為數學的地方是空白的所以判斷錯誤

    想請教各位大大  還有甚麼好方法  讓我輸出時 空白的地方不被取代掉

    程式如下

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click OpenFileDialog1.Filter = "所有檔案(*.*)|*.*" OpenFileDialog1.FilterIndex = 1 OpenFileDialog1.RestoreDirectory = True OpenFileDialog1.Multiselect = True OpenFileDialog1.InitialDirectory = PPath If OpenFileDialog1.ShowDialog() = DialogResult.OK Then For Each F In OpenFileDialog1.FileNames System.Windows.Forms.Application.DoEvents() FPath = IO.Path.GetDirectoryName(F) FNPath = IO.Path.GetDirectoryName(F) + "\" + IO.Path.GetFileName(F) FName = IO.Path.GetFileName(F) Next Dim B() As String Dim Bn As Integer = 0 Dim C() As String

    Dim Cn As Integer=0

                                                                                                                                                                                     
                Dim z As Integer                                                                                                                                                                                                                                                                                   
                Dim st As String = My.Computer.FileSystem.ReadAllText(FName) ', Encoding.ASCII)                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                   
                B = Split(st, vbCrLf)                                                                                                                                                                                                                                                                              
                                                                                                                                                                                                                                                                                                                   
                Bn = UBound(B)                                                                                                                                                                                                                                                                                     
                For z = 0 To Bn - 1                                                                                                                                                                                                                                                                                
                    System.Windows.Forms.Application.DoEvents()                                                                                                                                                                                                                                                    
                    DataList(DataListQty).TempRP = B(z)                                                                                                                                                                                                                                                            
                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                   
                    C = Split(DataList(DataListQty).TempRP, " ")                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
    										System.Windows.Forms.Application.DoEvents()                                                                                                                                                                                                                                                
                        DataList(DataListQty).SN = C(0)                                                                                                                                                                                                                                                        
                        DataList(DataListQty).Name = C(1)                                                                                                                                                                                                                             
                        DataList(DataListQty).Chinese = C(2)                                                                                                                                                                                                                                                                                                               
                        DataList(DataListQty).Math = C(3) 
                        DataList(DataListQty).English = C(4)                                                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                   
                        ResultStr1.Append(DataList(DataListQty).SN +DataList(DataListQty).Name+DataList(DataListQty).Math +DataList(DataListQty).English+ vbCrLf)                                                                                                                                                       
                       
                        DataListQty += 1                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                   
                                                                                                                                                                                                                                                                                                      
                    End If                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                   
              Next                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                   
            End If                                                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                                                                   
            My.Computer.FileSystem.WriteAllText(FPath + "\Result\ok.txt" , ResultStr1.ToString, True, Encoding.ASCII)                                                                                                                                                               
            ResultStr1.Clear()                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
            MsgBox("ok")                                                                                                                                                                                                                                                                                     
        End Sub                                                                                                                                                                                                                                                                                                    
    End Class                                                    



    • 已編輯 Duke Chien 2017年7月3日 上午 03:34 修正錯誤
    2017年7月3日 上午 03:02

解答

  • 文字檔那邊無法去做修改

    我有使用過vbtab去區分但還是無法

    上面Bill大大說的以固定長度去區分  這我還在找尋如何使用


    Substring, 參考 String.Substring 方法 , 用 String.Substring 方法 (Int32, Int32) 多載方法。


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2017年7月3日 下午 11:11
    版主

所有回覆

  • 你的資料格式看起來像固定長度,而不是空白分隔。建議你用固定長度的方式來分割每一列。

    當你用 Space 來 Split 時,就變成需要為各個狀況寫出特例的處理,關於這個 Split 的行為可以參考 Split的弔詭


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2017年7月3日 上午 03:31
    版主
  • 我的想法是能不能從文字檔產出那邊去修改?

    可能直接在空白處補 0 或是其他的標記文字嗎?!

    或是把分隔符號從 space 改成用 tab 那你就可以直接用 vbTab 去區分。

    我也覺得用 space 來看,你的文字檔出乎預料的很整齊,等寬字體? 

    2017年7月3日 上午 03:54
  • 文字檔那邊無法去做修改

    我有使用過vbtab去區分但還是無法

    上面Bill大大說的以固定長度去區分  這我還在找尋如何使用


    2017年7月3日 上午 04:07
  • 格式像資料庫記錄的文字檔可以考慮用ODBC Data Provider讀取, 請參考:

    Accessing Text Files using ODBC Data Provider


    • 已編輯 tihsMVP 2017年7月4日 上午 12:35
    2017年7月3日 上午 04:14
  • Tihs大大  你給的連結好像不對我連結到的是我的問題

    是否有更詳細的資訊能供我參考

    2017年7月3日 上午 05:57
  • 文字檔那邊無法去做修改

    我有使用過vbtab去區分但還是無法

    上面Bill大大說的以固定長度去區分  這我還在找尋如何使用


    Substring, 參考 String.Substring 方法 , 用 String.Substring 方法 (Int32, Int32) 多載方法。


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2017年7月3日 下午 11:11
    版主
  • 真是糊塗了, 已修正連結...
    2017年7月4日 上午 12:36
  • 感謝Bill大大 空白問題已經解決了

    也感謝各位大大的幫忙

    2017年7月4日 上午 08:27