2015-10-22 8 views
1

Я кодирую панель высоких баллов за игру, которую я сделал.Как получить максимальное значение из файла

Код записывает все оценки в текстовый файл, а затем считывает их, находит наивысший балл и отображает его в текстовом поле. У меня есть вопрос, что самое большое значение, которое отображается никогда не более 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)

+0

Предполагая, что «читать весь текст» возвращает одно слово «word», все, что вам нужно, это 'topScore.Text = fileReader'. Чтобы сказать больше, нам нужно знать, как вы храните данные. Хотя, я боюсь, вам нужно «прочитать все строки», чтобы получить строковый массив, а затем вы можете использовать 'Enumerable.select' для преобразования в целые числа и получить' max' –

+0

, пожалуйста, не используйте поле комментариев для кода - вам нужно чтобы добавить код в вопрос - отредактируйте свой вопрос –

+0

вместо 'Dim lines As String = My.Computer.FileSystem.ReadAllText' вам нужно' Dim lines() As String = File.ReadAllLines'. ПРИМЕЧАНИЕ: 'lines' - одно значение; 'lines()' - array. Кроме того, вы смешиваете 'ReadAllText' и' ReadAllLines' –

ответ

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 
+0

Long? Насколько велики оценки, которые вы ожидаете от игры?:-) – LarsTech

+1

@LarsTech Я только что получил buzzilion в тральщине –

+0

Я не могу заставить это работать для меня ... –

0

My.Computer.FileSystem.ReadAllText возвращает String, который является IEnumerable(Of Char).

Метод .Max() является расширением до IEnumerable(Of Char) - в основном, торгуя строкой в ​​виде массива символов. Таким образом, используя метод .Max(), вы действительно просите о самом большом одиночном символе, который среди массива арабских цифр будет превышать «9».

Вам нужно преобразовать массив символов в целочисленный массив.

Если предположить, что файл является запись разграничена возврат каретки/перевод строки (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() 

код здесь не тестировался. Могут быть ошибки орфографии/синтаксиса. Он представлен только в качестве отправной точки.

Гораздо лучший вариант - использовать сериализацию. Вы должны обязательно прочитать об этом. Сериализатор Newtonsoft.Json, доступный от NuGet, будет работать отлично - как и System.Xml.Serialization.XmlSerializer.

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 
Смежные вопросы