解析Double和String之间的可变小数位

时间:2014-09-02 05:48:57

标签: vb.net string file parsing double

我有一个充满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。

你有解决我的问题的方法吗?或者你能给我一些想法来解决我的问题吗?

1 个答案:

答案 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”。这解决了这个问题。