Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 | 3 | 4 |

 

  Вопрос: Чтение части строк из текстового файла Добавлено: 03.11.08 00:47  

Автор вопроса:  CodeHunter | Web-сайт: joiner.vghost.ru | ICQ: 795421 

Ответить

  Ответы Всего ответов: 59  

Номер ответа: 46
Автор ответа:
 CodeHunter



ICQ: 795421 

Вопросов: 2
Ответов: 25
 Web-сайт: joiner.vghost.ru
 Профиль | | #46
Добавлено: 09.11.08 00:19
Поясните пожалуйсто что есть "vbCrLf" в приведеном примере?

Ответить

Номер ответа: 47
Автор ответа:
 CodeHunter



ICQ: 795421 

Вопросов: 2
Ответов: 25
 Web-сайт: joiner.vghost.ru
 Профиль | | #47
Добавлено: 09.11.08 00:50
материться охото... ну недопетрю я каким образом этот пример вообще работает...

Строка
Using sr As New System.IO.StreamReader("C:\Program1\DB\Teams\" & TNtxt() & ".txt", System.Text.Encoding.GetEncoding(1251))

Вызывает ошибку:
Number of indices is less than the number of dimensions of the indexed array.

Из меня даже копи-пастер некудышный.

Думал зная принцип заполнения части строк из файла, я смогу сам сделать так как мне надо:
Запоняем ListBox5 именами файлов из папки C:\Program1\DB\Teams\, смотрим каждый файл из, уже отредактированого, списка в ListBox5, вытаскиваем из каждого только первуй строку "1:#####", отсекаем все до двоеточия и добавляем в ListBox1, при выделении в ListBox1 элемента берем уже строки 2.1, 3.1, 4.1 и заполняем ими LisBox2.

Люди, я с этой хреню мучаю не только вас, но и ещё 1 форум и кучу книг, статей, учебников - и у меня покачто нихрена не получается... Все думают что я невъе...ый програмер, которому дали кусок а он все понял и переделал его под себя. Пожалуйсто, умоляю, хотябы для примера приведенного вами, напишите коментарии для кода... ну не могу я понять... ступор какойто...

Ответить

Номер ответа: 48
Автор ответа:
 CodeHunter



ICQ: 795421 

Вопросов: 2
Ответов: 25
 Web-сайт: joiner.vghost.ru
 Профиль | | #48
Добавлено: 09.11.08 01:15
Получилась вот такая вот фигня:
*Думает про себя (Ой ща точно накол посадют)*
  1.         Dim s As String
  2.         For Each TNtxt() As String In ListBox5.Items()  ' Team Name txt file
  3.             Using sr As New System.IO.StreamReader("C:\Program1\DB\Teams\" & TNtxt.ToString, System.Text.Encoding.GetEncoding(1251))
  4.                 s = sr.ReadToEnd.Split(vbCrLf).ToString
  5.                 If Not s.IndexOf(":") = -1 Then
  6.                     ListBox1.Items.Add(s.Substring(s.IndexOf(":") + 1))
  7.                 End If
  8.             End Using
  9.         Next

Ругается что "Unable to cast object of type 'System.String' to type 'System.String[]'."

Ответить

Номер ответа: 49
Автор ответа:
 CodeHunter



ICQ: 795421 

Вопросов: 2
Ответов: 25
 Web-сайт: joiner.vghost.ru
 Профиль | | #49
Добавлено: 09.11.08 01:21
всмысли в строке
  1. For Each TNtxt() As String In ListBox5.Items()

Ответить

Номер ответа: 50
Автор ответа:
 BG(Алексей)



Вопросов: 26
Ответов: 295
 Профиль | | #50 Добавлено: 09.11.08 02:19
  1. For Each TNtxt As String In ListBox5.Items()

Ответить

Номер ответа: 51
Автор ответа:
 CodeHunter



ICQ: 795421 

Вопросов: 2
Ответов: 25
 Web-сайт: joiner.vghost.ru
 Профиль | | #51
Добавлено: 09.11.08 03:17
Не заполняет... :(

Ответить

Номер ответа: 52
Автор ответа:
 Алексей



black  admin

ICQ: 261779681 

Вопросов: 87
Ответов: 633
 Web-сайт: aleksey.nemiro.ru
 Профиль | | #52
Добавлено: 09.11.08 04:38
Поясните пожалуйсто что есть "vbCrLf" в приведеном примере?

vbCrLf -
первые две буквы (vb) сокращенно Visual Basic,
Cr - сокращенно от англ. carriage return - возврат каретки,
Lf - сокращенно от англ. line feed - перевод строки
Все вместе это константа языка Visual Basic, альтернатива Chr(13) + Chr(10)

Chr - от нагл. Char - символ, функция возвращающая текстовой символ по его ASCII-коду.
ASCII - англ. American Standard Code for Information Interchange - американский стандартный код для обмена информацией.

зы: еще я могу гадать на кофейной гуще, трактовать сны и предсказывать будущее :)

  1.        'Dim s As String  'ф топку
  2.         For Each TNtxt As String In ListBox5.Items
  3.             Using sr As New System.IO.StreamReader("C:\Program1\DB\Teams\" & TNtxt, System.Text.Encoding.GetEncoding(1251)) 'System.Text.Encoding.GetEncoding(1251) - кстати, это кодировка windows-1251, если ты не знал
  4.                 's = sr.ReadToEnd.Split(vbCrLf).ToString 'бредовый код, читаем в переменную s весь файл, делаем из него массив и получаем имя типа данных :)
  5.                 '.Split(vbCrLf)  - ой, косяк (да еще и мой :) ), надо функцию было юзать http://aleksey.nemiro.ru/blog/programming/framework-net/split.html
  6.                 For Each s As String In Split(sr.ReadToEnd(), vbCrLf)
  7.                     If Not s.IndexOf(":") = -1 Then
  8.                         ListBox1.Items.Add(s.Substring(s.IndexOf(":") + 1))
  9.                     End If
  10.                 Next
  11.             End Using
  12.         Next

Ответить

Номер ответа: 53
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #53 Добавлено: 09.11.08 10:31
Леха, забей.. бесполезно все это.. как об стенку горохом. Он не понимает элеметарных вещей, поэтому ничего не может сделать с теми примерами что мы ему пишем.. Он их тупо копирует в свой проект, и они само собой не работают. Мы разговариваем с ним на разных языках!

CodeHunter.. что Данила-мастер, не выходит каменный цветок?
Чтобы ты мог понять код а не доводить до нервного срыва весь форум, тебе придется почитать несколько глав из книг, которые, надеюсь, у тебя есть.. А именно:
- Работа со строками
- Чтение/Запись из файла
- Массивы и работа с ними
Разумеется, главы будут называться по другому, но смысл будет тот же.. Без знания этих основ разговаривать с тобой о чем то дальше - бесполезно.
Давай пока отвлечемся от кода и выясним несколько моментов.. У меня закралось ощущение того, что ты сам недопонимаешь того, что хочешь сделать, и ввиду отсутствия необходимых знаний запутался сам и запутал весь форум. По сути, твоя задача - плевая, но т.к. мы не знаем что, в конечном итоге, ты хочешь получить, то мы тебе даем только общие примеры а ты, по известным причинам, не в состоянии переделать их под себя. Поэтому я предлагаю пойти по другому пути.
1. Опиши своими словами в чем, конкретно, заключается твоя задача.. как можно подробнее.
2. Какие исходные данные ты имеешь.. Какие файлы, пример их содержания, формат.. ты их сам писал или они откуда то взялись.. и т.д. по возможности залей образцы на какой нибудь сервер чтоб их можно было скачать и посмотреть.
3. Что в итоге ты хочешь получить на выходе
4. Какие пути решения ты видишь..

Только имея полное представление о задаче, мы сможем написать пример применительно к твоей ситуации..

Ответить

Номер ответа: 54
Автор ответа:
 CodeHunter



ICQ: 795421 

Вопросов: 2
Ответов: 25
 Web-сайт: joiner.vghost.ru
 Профиль | | #54
Добавлено: 09.11.08 11:34
Задача программы - распределять команды по заданиям в определенном порядке, например по загруженности задания. Также вспомогательные функции - информация о выполнении заданий командами, подсчет результатов (времени потраченого на выполнение всех заданий), информацию о командах, игроках, заданиях, объектах и т.д.

В данный момент мне надо: Загрузить лист команд (файлы 'имя команды & ".txt";) из папки C:\Program1\DB\Teams\, и по нему заполнить ListBox1, но уже мало того что без ".txt", но вытащить из каждого файла первую строку (1:) и заполнить именно ими. (имя файла может отличаться от названия команды) После чего при выделении одной команды, заполняется ListBox2 никами игроков этой команды (строки 3.1, 4.1, 5.1, 6.1, 7.1 в кажом файле.) После выделения игрока в последнем листбоксе, мы можем работать с ним, а именно: Просматривать информацию, открывается окно неработающего чата (аски), которое в дальнейшем будит использоваться только вывода информации об игре доступной игроку. Например игрок пишет: "Кто на первом месте?", мы нажимаем кнопку "Информация о выполнении заданий" и получаем, только что собраную информацию, например, среднее время выполнений заданий, распределение по местам команд и т.д. Для каждого игрока чат свой, будит сохранятся в тот же файл, например в подпункт "3.4:" в определенном виде. Примерно таже система будит действовать и для списка заданий - тоже текстовики, тоже листбоксы, тоже пронумерованые строки.

Ответить

Номер ответа: 55
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #55 Добавлено: 09.11.08 13:10
Ок, отлично.. теперь все становится на свои места.. Теперь все разобьем на подпрограммы.. будем делать каждый пункт в отдельности, чтоб ты понимал что происходит..
Пункт 1:
Загрузить лист команд (файлы 'имя команды & ".txt" из папки C:\Program1\DB\Teams\, и по нему заполнить ListBox1, но уже мало того что без ".txt", но вытащить из каждого файла первую строку (1 и заполнить именно ими. (имя файла может отличаться от названия команды)

Показывай как этот участок у тебя это реализован..

Ответить

Номер ответа: 56
Автор ответа:
 CodeHunter



ICQ: 795421 

Вопросов: 2
Ответов: 25
 Web-сайт: joiner.vghost.ru
 Профиль | | #56
Добавлено: 09.11.08 13:43
  1.     'Готовый блок
  2.     Function GetFileList(ByVal dirInf As IO.DirectoryInfo) As IO.FileInfo()
  3.         Dim lst As New List(Of IO.FileInfo)
  4.         For Each di As IO.DirectoryInfo In dirInf.GetDirectories
  5.             lst.AddRange(GetFileList(di))
  6.         Next
  7.         lst.AddRange(dirInf.GetFiles)
  8.         Return lst.ToArray
  9.     End Function
  10.  
  11.     'Готовый блок
  12.     Function GetFileNames(ByVal dirName As String) As String()
  13.         Dim lst As New List(Of String)
  14.         Dim di As New IO.DirectoryInfo(dirName)
  15.         Dim files() As IO.FileInfo = GetFileList(di)
  16.         For Each fi As IO.FileInfo In files
  17.             Dim fileFullName As String = fi.FullName
  18.             Dim dirNameLength As Integer = dirName.Length + 1
  19.             Dim fileName As String = fileFullName.Substring(dirNameLength)
  20.             lst.Add(fileName)
  21.         Next
  22.         Return lst.ToArray
  23.     End Function
  24.  
  25.     'Готовый блок
  26.     Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
  27.         Me.FolderBrowserDialog1 = New System.Windows.Forms.FolderBrowserDialog ' Задаем диалог поиска папок
  28.         Me.FolderBrowserDialog1.SelectedPath = "C:\Program1\DB\Teams" ' По умолчанию дерево приводит в нужную папку
  29.         If FolderBrowserDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then ' Показать диалог поиска пути
  30.             Dim files() As String = GetFileNames(FolderBrowserDialog1.SelectedPath) ' Переменная
  31.             Me.TextBox17.Text = Me.FolderBrowserDialog1.SelectedPath ' Заполнить путь выбраной папки в текстбокс
  32.             Me.ListBox5.Items.Clear() ' Отчистить лист команд
  33.             Me.ListBox5.Items.AddRange(files) ' Добавить список найденых файлов
  34.         End If
  35.     End Sub

Ответить

Номер ответа: 57
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #57 Добавлено: 14.11.08 02:08
Не хочу показаться нескромным, но может стоит использовать базу данных, хотя-бы ту же аксесс, по моему это проще чем с файлами?

Ответить

Номер ответа: 58
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #58 Добавлено: 14.11.08 08:08
да рано ему с БД разбираться... ему бы основы освоить.. Xml- тут лучший вариант..

Ответить

Номер ответа: 59
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #59 Добавлено: 14.11.08 15:04
В базе данных здесь нет совершенно никакой необходимости.

Ответить

Страница: 1 | 2 | 3 | 4 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам