0

正規表現で vbscript を使用してファイルを解析しているので、一連の座標を変換できます。これは私が持っている現在のコードです:

Class cFormat
Private m_oSB
Private Sub Class_Initialize()
  Set m_oSB = CreateObject("System.Text.StringBuilder")
End Sub ' Class_Initialize

Public Function formatOne(sFmt, vElm)
 m_oSB.AppendFormat sFmt, vElm
  formatOne = m_oSB.ToString()
  m_oSB.Length = 0
End Function ' formatOne

Public Function formatArray(sFmt, aElms)
  m_oSB.AppendFormat_4 sFmt, (aElms)
  formatArray = m_oSB.ToString()
  m_oSB.Length = 0
End Function ' formatArray

End Class ' cFormat

Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")

Dim oFmt : Set oFmt = New cFormat

Dim oRE  : Set oRE  = New RegExp
oRE.Global    = True
oRE.Multiline = True
'                 0     1        2        3
oRE.Pattern = "^(\d+)d(\d+)'(\d+\.\d+)""([WN])$"

Dim sALL : sALL = goFS.OpenTextFile("C:\...\lat1.txt").ReadAll()
WScript.Echo sALL

WScript.Echo oFmt.formatArray( _
  "|{0,-5}|{1,-11}|{2,-11}|{3,-15}|" _
, Array("LoLa", "Degrees", "Minutes", "Seconds") _
)

 Dim oMTS : Set oMTS = oRE.Execute(sALL)

Dim oMT
For Each oMT In oMTS
  Dim sLoLa    : sLoLa    =      oMT.SubMatches(3)
  Dim nDegrees : nDegrees = CDbl(oMT.SubMatches(0))
  Dim nMinutes : nMinutes = CDbl(oMT.SubMatches(1))
  Dim nSeconds : nSeconds = CDbl(oMT.SubMatches(2))

WScript.Echo oFmt.formatArray( _
      "|{0,-5}|{1,11:N2}|{2,11:N2}|{3,15:N6}|" _
    , Array(sLoLa, nDegrees, nMinutes, nSeconds) _
)
Next

私はこの答えに基づいています。

私が抱えている問題は、サイクル内のすべての変数が空であるため、最後のエコーで何も得られないことです。問題を特定できないようですが、正規表現ですか? サイクル?本当にわかりません。

lat1.txt ファイルは、次の行を含む単純な txt ファイルです。

41d3'40.313"N  
38d42'29.295"N  
41d28'13.616"N  

最初にエコーするステートメントは機能しています...問題は最後のステートメントにあります。

誰か助けてくれませんか?

前もって感謝します、クラウディオ

4

1 に答える 1

1

それはあなたのパターンです、それを置き換えてください

oRE.Pattern = "^(\d+)d(\d+)\'(\d+\.\d+)""(N|W) *$" 

次のようになります。秒の出力は私のシステムでは正しくありませんが、それは地域の設定である可能性があります

41d3'40.313"N   
38d42'29.295"N   
41d28'13.616"N   

|LoLa |Degrees    |Minutes    |Seconds        |
|N    |      41,00|       3,00|  40.313,000000|
|N    |      38,00|      42,00|  29.295,000000|
|N    |      41,00|      28,00|  13.616,000000|
于 2012-06-06T11:00:21.863 に答える