faiqaa Ответов: 1

Как прочитать только 4-й элемент ( номер) из строки текстового файла в VB? И отображать окно сообщения на основе этого номера?


Я пытаюсь отобразить окно сообщения, основанное на количестве определенных продуктов, сохраненных в строках данных (4-й элемент) в текстовом файле, я знаю, как читать каждую строку, но не как читать только определенный элемент.У кого-нибудь есть какие-нибудь идеи? Дайте мне знать,заранее спасибо.
Ниже вы можете увидеть, какой код я использую для отображения всех строк данных.

Что я уже пробовал:

Dim STUDENT_FILE As String = ("C:\Users\Windows 7 User\Desktop\Stock.txt")
       Dim objReader As New System.IO.StreamReader(STUDENT_FILE)

       Dim strDataline As String 'Data line
       Dim strArr(2) As String ' Array for bits of line
       Dim blfound As Boolean
       ListBox1.Items.Clear()

       Do While objReader.Peek() <> -1 'read the file till the end.
           strDataline = (objReader.ReadLine()) ' read line and store into variable
           strArr = strDataline.Split(",") 'Split line and put into array

           ListBox1.Items.Add(strDataline)
           blfound = True

       Loop
       MsgBox("Stock data has been loaded")
       objReader.Close()
       If blfound = False Then MsgBox("stock data has not been found")

1 Ответов

Рейтинг:
9

OriginalGriff

Вы не можете прочитать "определенный элемент" из текстового файла, потому что он не имеет никакого неявного порядка - фактически даже строки являются просто интерпретацией символов в файле: каждый раз, когда встречается символ новой строки (или пара символов, в зависимости от операционной системы), это конец предыдущей строки.

Ваш код предполагает, что данные находятся в строках, с данными, разделенными запятыми (это называется CSV или "запятыми разделенными значениями"), и единственный способ получить "четвертый элемент из каждой строки" - буквально прочитать каждую строку - что вы и делаете - и использовать Split- что вы и делаете - чтобы разбить ее на элементы. После разделения вы можете получить доступ к элементам каждой строки через индекс массива в strArr.

Лично? Я бы использовал CSVReader: Быстрый читатель CSV[^] который будет обрабатывать данные лучше, чем техника "грубой силы", как вы используете (поскольку она поддерживает текстовые строки, которые могут содержать запятые).


faiqaa

Спасибо за ваше время, не могли бы вы привести мне пример доступа к элементам каждой строки через индекс массива?

OriginalGriff

Ты ведь шутишь, правда?
Ты хочешь, чтобы я показал тебе, как это делается:
Dim item1 As String = strArr(0)
Dim item2 As String = strArr(1)
...

Или я что-то упускаю?

faiqaa

Привет, дело в том, что я пытался это сделать, но это все равно не сработало, поэтому я подумал, что делаю что-то не так. Извини, если я обидел тебя, задав глупый вопрос.

OriginalGriff

Не обижайся, но .....
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы. Так что, если Вы нам ничего не скажете, нам нечего будет делать! (И вы удивитесь, как много людей хотят, чтобы мы писали для них такой код... :вздох: )

Так что же означает "это все еще не сработало"? Твой компьютер взорвался? Кошка убежала из дома? У тебя неправильные ценности? Чего вы ожидали, какой вклад внесли, какие результаты получили? Расскажите нам, что произошло, и покажите нам, какой код вы использовали, чтобы получить этот результат - или нам остается только гадать! :смеяться:

faiqaa

Это то, что я пытался использовать, кстати, я новый кодер, вот почему я не очень хорош в этом.
Частная суб frm7_Load(отправителя как объект, а равно EventArgs) обрабатывает ключевое слово mybase.Загрузить
Dim STUDENT_FILE As String = ("C:\Users\Windows 7. User\Desktop\Stock.txt")
Дим objReader, так как новая система.ИО.Что streamreader(STUDENT_FILE)

Dim strDataline As String 'строка данных
Dim strArr(2) As String ' массив для битов строки
Дим blfound как логическое
Список listbox1.Предметы.Четкий()

Делать, пока objReader.Peek() <> -1 'считывает файл до конца.

Петля
strDataline = (objReader.ReadLine()) ' читать строку и хранить в переменной


strArr = strDataline.Split(",") 'разделить строку и поместить в массив

Dim item1 As Integer = strArr(0)
Dim item2 As String = strArr(1)
Dim item3 As Integer = strArr(2)
Dim item4 As Integer = strArr(3)
Если item4 < 4, то
Ящик для сообщений.Шоу("количество запаса низкое, пожалуйста, проверьте")
Конец, Если

В основном, когда я загружаю форму, данные отображаются, и буквально ничего не происходит, вместо этого он должен отображать msgbox. Я специально сохранил количество товара на складе как 3.

OriginalGriff

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

Если item4 < 4, то

И установите точку останова (меню: "Debug...Переключить точку останова" - красная точка появится в начале строки, чтобы показать, что точка останова установлена - вы можете нажать на точку, чтобы удалить ее, или нажать "где должна быть точка", чтобы добавить точку останова. Попробуйте: вы поймете, что я имею в виду).
Запустите приложение в отладчике, и когда оно достигнет этой строки, оно остановится и позволит вам взять управление на себя. Теперь вы можете посмотреть на содержимое ваших переменных и увидеть, что именно вы в них имеете. Вы также можете запустить свой код построчно, используя функцию "один шаг".
Дайте ему попробовать, и посмотреть, если то, что вы думаете, должно происходить, это то, что на самом деле происходит!

faiqaa

У меня есть еще один вопрос, Что делать, если я хочу выделить/точно определить ряд акций, количество которых меньше 4? в настоящее время при каждом открытии формы отображается окно сообщения, если количество одного или нескольких продуктов меньше 4: "Количество товара слишком низкое, пожалуйста, внимательно проверьте". Спасибо.