我有一个充满txt文件的目录。文件数量是可变的。文件的名称如下:
...
0,7.txt
0,8.txt
0,85.txt
1,0.txt
1,1.txt
...
任何文件的名称对我在代码中的计算都很重要。
'Freifahrtdiagramm einlesen
Public Shared fortschrittsziffer As New List(Of Double)
Public Shared schubbeiwert As New List(Of Double)
Shared Sub freifahrtdiagrammEinlesen(dateiname As String)
fortschrittsziffer.Clear()
schubbeiwert.Clear()
Dim datei As New FileStream(Application.StartupPath + "\Freifahrtdiagramm\" + dateiname, FileMode.Open)
Dim leser As New StreamReader(datei)
Dim zeile As String
Dim werte() As String
While leser.Peek <> -1
zeile = leser.ReadLine
werte = zeile.Split(";")
fortschrittsziffer.Add(werte(0))
schubbeiwert.Add(werte(1))
End While
leser.Close()
datei.Close()
End Sub
'kT aus einer vorhandenen Datei auslesen
Shared Function kTAusDateiLesen(J As Double, PD As Double) As Double
Dim J0 As Double
Dim J1 As Double
Dim kT0 As Double
Dim kT1 As Double
freifahrtdiagrammEinlesen(PD.ToString + ".txt")
For i = 0 To fortschrittsziffer.Count - 1
If fortschrittsziffer.Item(i) >= J Then
If i = 0 Then
J0 = 0
kT0 = 0
Else
J0 = fortschrittsziffer.Item(i - 1)
kT0 = schubbeiwert.Item(i - 1)
End If
J1 = fortschrittsziffer.Item(i)
kT1 = schubbeiwert.Item(i)
If J1 - J0 = 0 Then
kTAusDateiLesen = 0
Else
kTAusDateiLesen = kT0 + (kT1 - kT0) / (J1 - J0) * (J - J0)
End If
Exit Function
End If
Next
kTAusDateiLesen = 0
End Function
'kT bestimmen. Wenn Datei nicht vorhanden, dann interpolieren
Shared Function kTBestimmen(J As Double, PD As Double) As Double
If System.IO.File.Exists(Application.StartupPath + "\Freifahrtdiagramm\" + PD.ToString + ".txt") Then
kTBestimmen = kTAusDateiLesen(J, PD)
Else
Dim ordner As New DirectoryInfo(Application.StartupPath + "\Freifahrtdiagramm\")
Dim wert1 As Double = 0
Dim wert2 As Double = 0
For Each datei As FileInfo In ordner.GetFiles
If Double.Parse(Replace(datei.Name, ".txt", "")) > PD Then
wert2 = kTAusDateiLesen(J, Double.Parse(Replace(datei.Name, ".txt", "")))
kTBestimmen = (wert1 + wert2) / 2
Exit Function
Else
wert1 = kTAusDateiLesen(J, Double.Parse(Replace(datei.Name, ".txt", "")))
End If
Next
kTBestimmen = 0
End If
End Function
如果我使用PD调用我的函数kTBestimmen()并且文件PD.txt存在,则根本没有问题。如果PD.txt不存在,那么我想在PD之间打开两个文件。所以如果我在kTBestimmen中的PD是1,25,并且1,25.txt不存在,我想打开1,2.txt和1,3.txt。
要找到这两个文件,较大的文件和较小的文件,我试图将我的filenamestring解析为double。我将“.txt”替换为“”,然后将其解析为Double。但是解析会将1,0更改为1,这会给我一个错误,因为只有文件1,0.txt存在而不是1.txt。我的格式我的double可以总是有一个小数位但是不能用于其他文件名,如0,85.txt。
你有解决我的问题的方法吗?或者你能给我一些想法来解决我的问题吗?
答案 0 :(得分:0)
我重命名了我的文件,以便它们总是有两个小数点:
... 0,70.txt 0,80.txt 0,85.txt 1,00.txt 1,10.txt ...
通过使用value.toString(“nx”),您可以强制解析使用x小数点。因此,如果value = 1,我将通过使用value.toString(“n2”)进行解析来获得字符串“1,00”。这解决了这个问题。