2014-02-13 28 views
0

我需要找到最後一次出現的特定字段。我嘗試了不同的方法,但無濟於事。Linq to text選擇最後的

這是我現在擁有的。它儘可能地發揮作用,但沒有使用Select子句。 Select子句會導致查詢崩潰。

Dim Qry = From lines In File.ReadAllLines(curMonth) 
      Let Data = lines.Split(" ") 
      Let LogDate = Data(0) 
      Let Time = Data(1) 
      Let DataType = Data(2) 
      Let DutyStatus = Data(3) 
      Let Memo = lines.Split("/") 
      Let Location = Memo(0) 
      Let LocationTag = Memo(1) 
      Let CoDriver = Memo(2) 
      Let DriverNumber = Memo(3) 
      Let Status = Memo(5) 
      Where DataType = "35" 

For Each lines In Qry 
    Debug.Print(lines.LogDate & ", " & lines.Time & ", " & lines.DutyStatus & ", " & lines.DataType _ 
     & ", " & lines.LocationTag & ", " & lines.CoDriver & ", " & lines.Status) 
Next 

感謝

下面是一些額外的信息。 樣本數據:

20130801 00:00 26 X /DRIVER/'Don Hall'/'1622'/290/'3.5.1.08'/ 
20130801 00:00 24 W /RULE//CAN2007/13.0/0.0/14.0/70.0/7.0/0/0/1/ 
20130801 00:00 31 C /POWER UNIT/'Tractor'/'8536'/1/''/'PY7341'/1374680419/''/''/''/''/''/''/''/''/0/''/'ON'/''/'Single'/ 
20130801 00:00 35 C /CODRIVER/'Margaret Hall'/'1623'/''/1/1365556442/ 
20130801 00:00 30 C /MOTOR CARRIER/'K-DAC Enterprises'/'3025 Sandhills RD., Baden, ON, N3A 3B8'/'3025 Sandhills RD., Baden, ON, N3A 3B8'/''/1/'1622'/'Don Hall'/1328079183/''/ 
20130802 00:00 03 X /MILES VEHICLE/94.0/1596267.0/1596361.0/2/ 
20130802 00:00 58 A /PREX/1//SCHED1/1//VCF/1//VMINOR/0//VMAJOR/0//POWERODOM/'1596267'//TOWEDODOM/'1596267'//TIME/'14:45'//LOCATION INSP/'Langley BC'/ 
20130802 00:00 04 X /MILES DRIVING/1596267.0/0.0/0.0/0.0/0.0/0.0/0.0/1596361.0/94.0/0/2/0.0/94.0/0.0/ 
20130802 00:00 25 X /PRINT/'20130803 01:23'/1/0/ 
20130802 12:45 32 X /TOWED UNIT/'Trailer'/'53566'/1/''/'K8601J'/1375453962/''/''/''/''/''/''/''/''/0/''/'ON'/''/'Single'/ 

這個數據建立,直到月底另一個文件時開始。 (每個記錄的日期開始這個窗口換行的。)

樣品從LINQ查詢需要:

20131021, 11:30, X, 35, CODRIVER, 'Margaret Hall', 0 

我希望這有助於你明白我什麼了。

+2

顯示你的輸入是怎樣的,你的輸出應該如何。 – MarcinJuraszek

+0

'數據'和'備忘錄'將共享您正在閱讀的每一行的一些數據。另外,這將在開始解析文本之前將整個文件加載到內存中(我假設它是文本)。與嘗試使用LINQ進行讀取和解析相比,實現文本解析有更簡單的方法。 –

+0

謝謝。如何向此主題添加更多信息?我只是花了幾分鐘的時間纔回復,只是爲了發現我的評論很長。另外,當我按下Enter鍵並按下Ctrl鍵時,我的評論被提交,而不是向下移動一行。再次感謝。 – Don6558

回答

0

查看是否將Where子句移動到DataType賦值有用之後。在我看來,你的查詢正在讀取每一行,並試圖按照你想要的方式分割它,而不是你想要分析的行。 WHERE子句應篩選出來:

Dim Qry = From lines In File.ReadAllLines(curMonth) 
      Let Data = lines.Split(" ") 
      Let LogDate = Data(0) 
      Let Time = Data(1) 
      Let DataType = Data(2) 
      Where DataType = "35" 
      Let DutyStatus = Data(3) 
      Let Memo = lines.Split("/") 
      Let Location = Memo(0) 
      Let LocationTag = Memo(1) 
      Let CoDriver = Memo(2) 
      Let DriverNumber = Memo(3) 
      Let Status = Memo(5) 
      Select LogDate & "," & Time & "," & DutyStatus & "," & DataType _ 
       & "," & LocationTag & "," & CoDriver & "," & Status 

每個條目在查詢結果還將有一個格式化字符串,您可以使用。如果你需要一個集合而不是輸出數據,你可以簡單地調用ToList方法。

+0

謝謝。我使用ToList,得到了計數並返回了最後一個項目。 – Don6558

+0

@ Don6558如果這解決了您的問題,請記住標記此答案。謝謝。 – tinstaafl

+0

我很樂意。在哪裏/如何將此問題標記爲已回答?我看不到「已答覆」按鈕。沒關係。我想到了。謝謝。 – Don6558