Prepar 3D のローケル問題対策用にファイル中の経度緯度を31°50′22″とかから31.なんチャラに変換するプログラムです。
フォルダを指定してあげれば、それ以下のところから fxml ファイルを探し出します。
変換したいファイルにチェックをつけて変換してください。
プログラムフォルダは直接書き換えできません。
シナリオフォルダをどこぞにコピーして、書き換えたら戻してください。
元ファイルは、元の場所に順次 .org -> .org1 みたいな感じで100個まで保存されます。
100個以上あった場合は中止します。
(南と西は-をつけて吐きます)
動作環境、 .net 4.6
Version 1.0.4
テキストボックスに入力したフォルダをデフォルトで検索します
ユーザーフォルダボタンを押すと、テキストボックスにデフォルトシナリオ保存フォルダの位置を入力します
Setup_ChangeLatLng_1.0.4
ソースコード
フォームは勝手に作ってください
フォルダ名表示のテキストボックス = txtSearchFolder
検索ボタン = btnSearch
ファイル名表示用のチェックドリストボックス = clbFiles
変換ボタン = btnTrans
終了ボタン = btnExit
vb
Imports System.Text.RegularExpressions
Public Class fMain
Private TargetFiles As List(Of String)
Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
Dim fbd As New FolderBrowserDialog
fbd.Description = "フォルダを指定してください。"
fbd.RootFolder = Environment.SpecialFolder.Desktop
fbd.SelectedPath = My.Settings.SearchFolderName
fbd.ShowNewFolderButton = False
If fbd.ShowDialog(Me) = DialogResult.OK Then
txtSearchFolder.Text = fbd.SelectedPath
Dim files As String() = System.IO.Directory.GetFiles(fbd.SelectedPath, "*.fxml", System.IO.SearchOption.AllDirectories)
If Not IsNothing(files) AndAlso files.Count > 0 Then
My.Settings.SearchFolderName = fbd.SelectedPath
clbFiles.Items.AddRange(files)
TargetFiles = New List(Of String)
For n As Integer = 0 To files.Count - 1
TargetFiles.Add(files(n))
Next
End If
End If
End Sub
Private Sub btnTrans_Click(sender As Object, e As EventArgs) Handles btnTrans.Click
If clbFiles.SelectedItems.Count = 0 Then Exit Sub
For Each TargetFile As String In clbFiles.SelectedItems
If System.IO.File.Exists(TargetFile) Then
Dim sr As New System.IO.StreamReader(TargetFile, System.Text.Encoding.GetEncoding("UTF-8"))
Dim stringTargetFile As String = sr.ReadToEnd()
sr.Close()
Dim SearchStringLat As String = ""
Dim rLat As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex(SearchStringLat, System.Text.RegularExpressions.RegexOptions.IgnoreCase)
Dim mLat As System.Text.RegularExpressions.Match = rLat.Match(stringTargetFile)
While mLat.Success
Dim TargetText As String = mLat.Value.Replace("", "").Replace("°", ",").Replace("'", ",")
Dim strArrayTmp() As String = TargetText.Split(","c)
If strArrayTmp.Count > 0 Then
Dim headString As String = Mid(strArrayTmp(0), 1, 1)
strArrayTmp(0) = Mid(strArrayTmp(0), 2)
Dim dbldeg As Double = 0
Dim TransNumber As Integer = 1
For n As Integer = 0 To strArrayTmp.Count - 1
If n > 0 Then
TransNumber = TransNumber * 60
End If
dbldeg = dbldeg + (CDbl(strArrayTmp(n)) / TransNumber)
Next
If headString = "S" Then
dbldeg = dbldeg * -1
End If
Dim NewTextLat As String = ""
stringTargetFile = stringTargetFile.Replace(mLat.Value, NewTextLat)
End If
mLat = rLat.Match(stringTargetFile)
End While
Dim SearchStringLng As String = ""
Dim rLng As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex(SearchStringLng, System.Text.RegularExpressions.RegexOptions.IgnoreCase)
Dim mLng As System.Text.RegularExpressions.Match = rLng.Match(stringTargetFile)
While mLng.Success
Dim TargetText As String = mLng.Value.Replace("", "").Replace("°", ",").Replace("'", ",")
Dim strArrayTmp() As String = TargetText.Split(","c)
If strArrayTmp.Count > 0 Then
Dim headString As String = Mid(strArrayTmp(0), 1, 1)
strArrayTmp(0) = Mid(strArrayTmp(0), 2)
Dim dbldeg As Double = 0
Dim TransNumber As Integer = 1
For n As Integer = 0 To strArrayTmp.Count - 1
If n > 0 Then
TransNumber = TransNumber * 60
End If
dbldeg = dbldeg + (CDbl(strArrayTmp(n)) / TransNumber)
Next
If headString = "W" Then
dbldeg = dbldeg * -1
End If
Dim NewTextLat As String = ""
stringTargetFile = stringTargetFile.Replace(mLng.Value, NewTextLat)
End If
mLng = rLng.Match(stringTargetFile)
End While
Dim newFileName As String = TargetFile & ".org"
If System.IO.File.Exists(TargetFile & ".org") Then
Dim n As Integer = 1
newFileName = TargetFile & ".org" & CStr(n)
While System.IO.File.Exists(newFileName) OrElse n < 100
n += 1
newFileName = TargetFile & ".org" & CStr(n)
End While
If System.IO.File.Exists(newFileName) Then
MsgBox("バックアップファイルが多すぎるので中止します")
Exit Sub
End If
End If
System.IO.File.Move(TargetFile, newFileName)
Dim sw As New System.IO.StreamWriter(TargetFile, False, System.Text.Encoding.GetEncoding("UTF-8"))
sw.Write(stringTargetFile)
sw.Close()
End If
Next
End Sub
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
Me.Close()
End Sub
End Class
c# (Code Converter で自動変換)
Imports System.Text.RegularExpressions
Public Class fMain
Private TargetFiles As List(Of String)
Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
Dim fbd As New FolderBrowserDialog
fbd.Description = "フォルダを指定してください。"
fbd.RootFolder = Environment.SpecialFolder.Desktop
fbd.SelectedPath = My.Settings.SearchFolderName
fbd.ShowNewFolderButton = False
If fbd.ShowDialog(Me) = DialogResult.OK Then
txtSearchFolder.Text = fbd.SelectedPath
Dim files As String() = System.IO.Directory.GetFiles(fbd.SelectedPath, "*.fxml", System.IO.SearchOption.AllDirectories)
If Not IsNothing(files) AndAlso files.Count > 0 Then
My.Settings.SearchFolderName = fbd.SelectedPath
clbFiles.Items.AddRange(files)
TargetFiles = New List(Of String)
For n As Integer = 0 To files.Count - 1
TargetFiles.Add(files(n))
Next
End If
End If
End Sub
Private Sub btnTrans_Click(sender As Object, e As EventArgs) Handles btnTrans.Click
If clbFiles.SelectedItems.Count = 0 Then Exit Sub
For Each TargetFile As String In clbFiles.SelectedItems
If System.IO.File.Exists(TargetFile) Then
Dim sr As New System.IO.StreamReader(TargetFile, System.Text.Encoding.GetEncoding("UTF-8"))
Dim stringTargetFile As String = sr.ReadToEnd()
sr.Close()
Dim SearchStringLat As String = ""
Dim rLat As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex(SearchStringLat, System.Text.RegularExpressions.RegexOptions.IgnoreCase)
Dim mLat As System.Text.RegularExpressions.Match = rLat.Match(stringTargetFile)
While mLat.Success
Dim TargetText As String = mLat.Value.Replace("", "").Replace("°", ",").Replace("'", ",")
Dim strArrayTmp() As String = TargetText.Split(","c)
If strArrayTmp.Count > 0 Then
Dim headString As String = Mid(strArrayTmp(0), 1, 1)
strArrayTmp(0) = Mid(strArrayTmp(0), 2)
Dim dbldeg As Double = 0
Dim TransNumber As Integer = 1
For n As Integer = 0 To strArrayTmp.Count - 1
If n > 0 Then
TransNumber = TransNumber * 60
End If
dbldeg = dbldeg + (CDbl(strArrayTmp(n)) / TransNumber)
Next
If headString = "S" Then
dbldeg = dbldeg * -1
End If
Dim NewTextLat As String = ""
stringTargetFile = stringTargetFile.Replace(mLat.Value, NewTextLat)
End If
mLat = rLat.Match(stringTargetFile)
End While
Dim SearchStringLng As String = ""
Dim rLng As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex(SearchStringLng, System.Text.RegularExpressions.RegexOptions.IgnoreCase)
Dim mLng As System.Text.RegularExpressions.Match = rLng.Match(stringTargetFile)
While mLng.Success
Dim TargetText As String = mLng.Value.Replace("", "").Replace("°", ",").Replace("'", ",")
Dim strArrayTmp() As String = TargetText.Split(","c)
If strArrayTmp.Count > 0 Then
Dim headString As String = Mid(strArrayTmp(0), 1, 1)
strArrayTmp(0) = Mid(strArrayTmp(0), 2)
Dim dbldeg As Double = 0
Dim TransNumber As Integer = 1
For n As Integer = 0 To strArrayTmp.Count - 1
If n > 0 Then
TransNumber = TransNumber * 60
End If
dbldeg = dbldeg + (CDbl(strArrayTmp(n)) / TransNumber)
Next
If headString = "W" Then
dbldeg = dbldeg * -1
End If
Dim NewTextLat As String = ""
stringTargetFile = stringTargetFile.Replace(mLng.Value, NewTextLat)
End If
mLng = rLng.Match(stringTargetFile)
End While
Dim newFileName As String = TargetFile & ".org"
If System.IO.File.Exists(TargetFile & ".org") Then
Dim n As Integer = 1
newFileName = TargetFile & ".org" & CStr(n)
While System.IO.File.Exists(newFileName) OrElse n < 100
n += 1
newFileName = TargetFile & ".org" & CStr(n)
End While
If System.IO.File.Exists(newFileName) Then
MsgBox("バックアップファイルが多すぎるので中止します")
Exit Sub
End If
End If
System.IO.File.Move(TargetFile, newFileName)
Dim sw As New System.IO.StreamWriter(TargetFile, False, System.Text.Encoding.GetEncoding("UTF-8"))
sw.Write(stringTargetFile)
'閉じる
sw.Close()
End If
Next
End Sub
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
Me.Close()
End Sub
End Class