Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение части строк файла 
V
    Опции темы
DviRUS
Дата 3.11.2008, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Капыч
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 24.10.2006
Где: Волгоград

Репутация: нет
Всего: 5



Здравствуете.
Мне нужно из текстового файла вида:

Код

1:Super
2:Player1
2.1:Федя
2.2:123123123
...
8:ВАЗ2112


извлеч в текстбоксы следующие значения:
TextBox1: Super
Textbox3: Player1
Textbox4: Федя
Textbox5: 123123123
...
Textbox8: ВАЗ2112
Читал, читал про работу с текстовыми файлами и ничего не понял... 
Пожалуйсто дайте решение или подталкните на умню и !понятную! статью с коментами.


--------------------
Это не только мерзко, но и невозможно! (с)
PM MAIL ICQ Skype   Вверх
Pilger
Дата 3.11.2008, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 10.5.2008
Где: Германия

Репутация: нет
Всего: нет



Например есть такой простой способ:

Код

Imports System.IO.File
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Сохраняем содержимое текстового документа в массив
        Dim TextFile() As String = ReadAllLines("Datei.txt")

        'Узнаем, на какой позиции в первой строчке находится двоеточие
        Dim Trennung As Short = TextFile(0).IndexOf(":"c)

        'Копируем текст из первой строчки после позиции, где нашли двоеточие и вставляем в TextBox1
        TextBox1.Text = TextFile(0).Substring(Trennung + 1)

    End Sub
End Class


Это сообщение отредактировал(а) Pilger - 3.11.2008, 18:35


--------------------
Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert.
PM MAIL ICQ   Вверх
DviRUS
Дата 3.11.2008, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Капыч
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 24.10.2006
Где: Волгоград

Репутация: нет
Всего: 5



2008 не знает что есть "ReadAllLines"... :(


--------------------
Это не только мерзко, но и невозможно! (с)
PM MAIL ICQ Skype   Вверх
Bogdan1024
Дата 4.11.2008, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: нет
Всего: 13



Могу написать те на C#
Но лучше объясню:
Открываешь файл используя какой-нибудь System.IO.FileStream
Создаёшь System.IO.StreamReader указав в кострукторе предыдущий поток типа System.IO.FileStream
У System.IO.StreamReader есть методы ReadLine и ReadToEnd или ReadAll (не помню как называется, вобщем, всё читает)
Пользуешься
Закрываешь оба потока.


--------------------
user posted image
PM MAIL   Вверх
Pilger
Дата 4.11.2008, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 10.5.2008
Где: Германия

Репутация: нет
Всего: нет



Для этого я в самом верху и написал:
Код

Imports System.IO.File

Их надо импортировать.


--------------------
Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert.
PM MAIL ICQ   Вверх
DviRUS
Дата 7.11.2008, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Капыч
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 24.10.2006
Где: Волгоград

Репутация: нет
Всего: 5



Pilger, заработало! smile Так... теперь нада тоже самое сделать с остальными строками.

Добавлено через 9 минут
Все - разобрался.
при чтении строк типа "2.1:Федя", оно выводит результат "1:Федя", но мне нужно "Федя"
Добавил ", System.Text.Encoding.Default" для переноса русских символов.

Добавлено через 11 минут и 23 секунды
Что означает буква "с" в строке
Код

Dim Trennung As Short = TextFile(0).IndexOf(":"c)



--------------------
Это не только мерзко, но и невозможно! (с)
PM MAIL ICQ Skype   Вверх
Rififi
Дата 8.11.2008, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 1
Всего: 36



на VB не программирую, но на C# это будет так (а поскольку эти два языка эквивалентны, значит можно соорудить аналог и для VB)

Код
// Сюда помещаем нужное количество текст-боксов
var l = new List<TextBox>() { new TextBox(), new TextBox(), new TextBox(), new TextBox() };
using (TextReader rd = new StreamReader("input.txt", Encoding.GetEncoding(1251)))
{
    // SIC: Если строк в файле меньше чем текст-боксов, то произойдет исключение
    // SIC: Для обеспечения thread-safe может потребоваться вызов Invoke
    l.ForEach(tb => tb.Text = rd.ReadLine().Split(':').LastOrDefault());
}

PM MAIL   Вверх
DviRUS
Дата 8.11.2008, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Капыч
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 24.10.2006
Где: Волгоград

Репутация: нет
Всего: 5



Не - вообще мне нужно это не в текстбоксы засунуть, а в Листбокс... И эту проблему я решил - читай добавления.

Добавлено через 5 минут и 3 секунды
Не получается засунуть в Листбокс определенные строки из файлов... Тоесть у меня есть несколько текстовых файлов в папке, так вот мне нада из этих текстовиков выдрать первые строки и заполнить их в листбокс.


--------------------
Это не только мерзко, но и невозможно! (с)
PM MAIL ICQ Skype   Вверх
DviRUS
Дата 8.11.2008, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Капыч
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 24.10.2006
Где: Волгоград

Репутация: нет
Всего: 5



Такой минивопрос: Как удалить выделенные обьекты из Листбокса? Me.ListBox5.SelectedItems.Clear не работает...


--------------------
Это не только мерзко, но и невозможно! (с)
PM MAIL ICQ Skype   Вверх
Pilger
Дата 8.11.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 10.5.2008
Где: Германия

Репутация: нет
Всего: нет



Ну так тебе для каждой строки в отдельности находить ":" надо. Тогда он правильно будет отделять.
":"c означает, что ":" является char(один символ).
Что бы добавить в листбокс, пишешь
Код

ListBox.Items.Add(Text)

Что бы удалить выбранный объект из листбокса, пишешь
Код

ListBox.Items.RemoveAt(ListBox.SelectedIndex)


Это сообщение отредактировал(а) Pilger - 8.11.2008, 14:17


--------------------
Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert.
PM MAIL ICQ   Вверх
DviRUS
Дата 8.11.2008, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Капыч
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 24.10.2006
Где: Волгоград

Репутация: нет
Всего: 5



Код

ListBox.Items.RemoveAt(ListBox.SelectedIndex)
не удаляет все выделеные объекты, а удаляет по одному...

Добавлено через 8 минут и 52 секунды
Цитата(Pilger @  8.11.2008,  14:15 Найти цитируемый пост)
Ну так тебе для каждой строки в отдельности находить ":" надо. Тогда он правильно будет отделять.

А нельзя использовать Split? я как понимаю это специальная команда предназначеная именно для этого...
Мне в идеале надо определять какой пункт (1, 2.1, 4.4, 8, ...), после этого смотреть разделитель, и после этого уже задавать переменные..


--------------------
Это не только мерзко, но и невозможно! (с)
PM MAIL ICQ Skype   Вверх
DviRUS
Дата 8.11.2008, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Капыч
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 24.10.2006
Где: Волгоград

Репутация: нет
Всего: 5



Использую следущий метод:
Код

        Dim tl As New TableLayoutPanel()
        tl.Dock = DockStyle.Fill
        tl.ColumnCount = 1
        tl.RowCount = 0
        Using sr As New System.IO.StreamReader("C:\Program1\DB\Teams\Super.txt", System.Text.Encoding.GetEncoding(1251))
            For Each s As String In sr.ReadToEnd().Split(vbCrLf)
                If Not s.IndexOf(":") = -1 Then
                    Dim tb As New TextBox()
                    tb.Text = s.Substring(s.IndexOf(":") + 1)
                    tb.Dock = DockStyle.Fill
                    tl.Controls.Add(tb)
                End If
            Next
        End Using
        Me.Controls.Add(tl)

Пожалуйсто проставте коментарии на него... чтоб я знал что к чему..


--------------------
Это не только мерзко, но и невозможно! (с)
PM MAIL ICQ Skype   Вверх
Pilger
Дата 9.11.2008, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 10.5.2008
Где: Германия

Репутация: нет
Всего: нет



Цитата(DviRUS @ 8.11.2008,  17:02)
Код

ListBox.Items.RemoveAt(ListBox.SelectedIndex)
не удаляет все выделеные объекты, а удаляет по одному...

А нельзя использовать Split? я как понимаю это специальная команда предназначеная именно для этого...
Мне в идеале надо определять какой пункт (1, 2.1, 4.4, 8, ...), после этого смотреть разделитель, и после этого уже задавать переменные..

Ну вот и удали их столько раз, сколько нужно... по идее должно работать.

Split вроде бы делит string и возвращает массив. Например если у тебя 1:2:3:4:4543 то он вернет (1,2,3,4,4543). У тебя ":" присутствует только 1 раз и поэтому я бы просто нашел бы его и зная его позицию поделил бы этот string на два других без проблем. Но это как тебе проще.

Это сообщение отредактировал(а) Pilger - 9.11.2008, 22:36


--------------------
Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.