如何从文件中获取最大值

时间:2015-10-22 23:30:38

标签: vb.net

我正在为我已经制作的游戏编写高分面板。

代码将所有分数写入文本文件,然后读取它们,找到最高分并将其显示在文本框中。 我有一个问题,即显示的最大值永远不会超过9。

这是我为阅读文本文件并将最大值写入标签而编写的代码

Dim fileReader As String
fileReader = My.Computer.FileSystem.ReadAllText("C:\Users\samdo_000\Desktop\1234\score.txt")
topScore.Text = (fileReader.Max)

我做错了什么?

由于

scorePnl.Show()
Dim file As System.IO.StreamWriter
file = My.Computer.FileSystem.OpenTextFileWriter("C:\Users\samdo_000\Desktop\1234\score.txt", True)
file.WriteLine(pipeNumber)
file.Close()
Dim fileReader As String
fileReader = My.Computer.FileSystem.ReadAllText("C:\Users\samdo_000\Desktop\1234\score.txt")
topScore.Text = (fileReader.Max)
currentScore.Text = pipeNumber
Timer1.Enabled = False

每次游戏结束时,它都会存储一个整数(pipeNumber)

3 个答案:

答案 0 :(得分:1)

fileReader.Max返回它在字符串中可以找到的最高值字符,可能只有9。

假设文本文件的每个分数都以换行符分隔,您可能只需遍历每一行并进行测试以确保您的“字符串”实际上是一个分数,如果是,则测试最高值:

Dim highScore As Integer = 0
For Each s As String In File.ReadAllLines("C:\Users\samdo_000\Desktop\1234\score.txt")
  Dim testScore As Integer
  If Integer.TryParse(s, testScore) Then
    highScore = Math.Max(highScore, testScore)
  End If
Next
topScore.Text = highScore.ToString

答案 1 :(得分:0)

My.Computer.FileSystem.ReadAllText返回StringIEnumerable(Of Char)

.Max()方法是IEnumerable(Of Char)的扩展 - 基本上将字符串作为字符数组进行交换。因此,通过使用.Max()方法,您确实需要最大的单个字符,其中一组阿拉伯数字将在" 9&#34 ;.

您需要将字符数组转换为某种整数数组。

假设您的文件是由回车/换行(VbCrLf)分隔的记录,您可以使用的一种方法是:

Dim lines As List(Of String) = My.Computer.FileSystem.ReadAllText(path).Split({vbCr, vbLf}, SplitOptions.RemoveEmpty)
Dim items As List(Of Int64) = New List(Of Int64)

lines.Each(Sub(i) items.Add(Int64.Parse(i)))

Dim maxScore As Int64 = items.Max()

此处的代码未经测试。可能存在拼写/语法错误。它仅作为起点出现。

更好的选择是使用序列化。你一定要读它。 NuGet提供的Newtonsoft.Json序列化程序可以很好地工作 - 就像System.Xml.Serialization.XmlSerializer一样。

答案 2 :(得分:0)

假设你有一堆行,每行都包含一个数值,这就行了

dim lines() as string = File.ReadAllLines("C:\Users\samdo_000\Desktop\1234\score.txt")
dim max as Long = lines.Select(function (i as Long)i).Max()
txt.Text = max