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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск и печать данных из .txt нужна помощь 
V
    Опции темы
c05Septh
  Дата 27.2.2014, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте форумчане,
Сразу предупреждаю что я уже 8 лет живу в Бельгии и программировать учусь тут, так что если я использую не те термины то строго не судите. 

У меня есть небольшая проблема с написанием очередной программы.
Нужно написать программу которая позволяет найти и выбрать текстовый документ в котором хранятся данные. Примерно такого формата: статус/каталог/тип/группа1/группа2/группа3/код/продукт/ISBномер/.... и так далее 60 групп данных(на Нидерландском языке) И вот эти данные хранятся отдельными линиями, ну то есть через энтер.
например:

активный/j/книги/5970///100210/"название книги"/0-201-61592-7/...
активный/j/книги/5993///100228/"название книги"/0-201-61575-1/...

Нужно по названию продукта провести поиск во всём текстовом файле, найти все продукты(группа 8) со словом "inkthervulling" и вывести на экран полное название и цену(16 группа, перед 16 слэшем), после чего распечатать как прайслист с лого и адресом компании.

вот то что у меня уже есть, дальше не получается.


Код


Private Sub Button1_Click(sender As Onject, e As EventArgs) Handles Button1_Click
 
Dim rij(50) As string
Dim nofd As New OpenFileDialog
Dim i As Integer
 
nofd.Filter = "Text Files (*.txt)|*.txt"
nofd.InitialDirectory = My.Computer.Filesystem.SpecialDirectories.Desktop
If nofd.ShowDialog <> Windows.Forms.Dialogresult.OK Then Exit Sub
 
Dim myfile As Sting = nofd.FileName
Dim reader As New System.IO.StreamReader(myfile)
Dim lines = system.File.IO.File.ReadAllLines(myfile)
 
For i=0 to lines.Length - 1
If lines(i).Contains("Inkthervulling") Then
rij(i)=lines(i)
End If
Next
 
End Sub



Заранее большое спасибо за ответы и советы
PM MAIL   Вверх
diadiavova
Дата 27.2.2014, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Первый вопрос касается формата данных: это требование заказчика(работодателя) или собственное ноу-хау? Если собственное, то возможно следует ознакомиться с работой с базами данных или по крайней мере с форматами, более приспособленными для таких целей, чем простой текст(например XML).
Второе(если делаешь как делаешь) - не используй массив, когда заранее неизвестно количество элементов. Есть более удобные коллекции, в первую очередь рассмотри List(Of T), по крайней мере там не надо писать количество элементов при создании, а они просто добавляются в конец списка.
Ну и третье - не совсем понятно, что именно дальше не получается. Если не можешь разбить строку по слешам, то это делается так String.Split, ну, а формирование выходных данные - это уже на твой вкус.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
c05Septh
Дата 27.2.2014, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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


вот пример одной из найденных строчек:

actief\J\HARDWARE\3016\\\1333275\Inkthervulling HP 351XL, 14ml Kleur\\CATRIDGE EXPERT\01\09\2007\\21\21,95\\\\\\-\\\\\\\\\\\0\5\0\0\15\\\\\100506\Cremdalin BVBA (CXP/The refil Store)\\13.6\EUR\1\\-\-\\-\-\-\-\J\J\\\\

Выделил то что нужно распечатать.

А вообще я не хочу писать программы, так получилось) 
И последние 6 дней я писал по 8 часов в сутки что это мне так надоело что я уже не могу думать. 
Мне во сне сняться ошибки компилирования.

По поводу листа сейчас ознакомлюсь
PM MAIL   Вверх
diadiavova
Дата 27.2.2014, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(c05Septh @  27.2.2014,  15:17 Найти цитируемый пост)
Выделил то что нужно распечатать.

Можно вытянуть регулярками например, но просто выделить что надо - недостаточно. Надо описать признаки, по которым эти фрагменты однозначно идентифицируются. Ну, например точный порядковых номер между слешами или к примеру, надо вытащить число с запятой, при этом других чисел с запятой нет, а это обязательно ее имеет. То есть надо точно сформулировать, что именно мы ищем.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
c05Septh
Дата 27.2.2014, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



есть точное количество слешей, их 59-60 если не ошибаюсь.
мне нужны данные между 7-8, 15-16
PM MAIL   Вверх
diadiavova
Дата 27.2.2014, 14:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(c05Septh @  27.2.2014,  15:39 Найти цитируемый пост)
есть точное количество слешей, их 59-60 если не ошибаюсь.
мне нужны данные между 7-8, 15-16 

Это решает метод Split, ты просто указываешь ему в качестве разделителя слеш и в результате получаешь массив строк между ними и нужные тебе элементы можно будет найти по одним и тем же индексам.
Вот код
Код

Module Module1

    Sub Main()
        Dim input = "actief\J\HARDWARE\3016\\\1333275\Inkthervulling HP 351XL, 14ml Kleur\\CATRIDGE EXPERT\01\09\2007\\21\21,95\\\\\\-\\\\\\\\\\\0\5\0\0\15\\\\\100506\Cremdalin BVBA (CXP/The refil Store)\\13.6\EUR\1\\-\-\\-\-\-\-\J\J\\\\"
        Dim a = input.Split("\")
        For i = 0 To a.Length - 1
            Console.WriteLine("{0}: {1}", i, a(i))
        Next
        Console.ReadKey()
    End Sub

End Module


Вот вывод по твоей строке
Код

0: actief
1: J
2: HARDWARE
3: 3016
4:
5:
6: 1333275
7: Inkthervulling HP 351XL, 14ml Kleur
8:
9: CATRIDGE EXPERT
10: 01
11: 09
12: 2007
13:
14: 21
15: 21,95
16:
17:
18:
19:
20:
21: -
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32: 0
33: 5
34: 0
35: 0
36: 15
37:
38:
39:
40:
41: 100506
42: Cremdalin BVBA (CXP/The refil Store)
43:
44: 13.6
45: EUR
46: 1
47:
48: -
49: -
50:
51: -
52: -
53: -
54: -
55: J
56: J
57:
58:
59:
60:


То есть, в выходном массиве интересующие тебя строки будут находиться под индексами 7 и 15 соответственно.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
c05Septh
Дата 27.2.2014, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Идеально, большое спасибо

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


Новичок



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

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



Прошу прощения за тупость, как мне эти элементы вывести в глобальные переменные в ряды?

Код

Sub Main()
        Dim input = rij(i)
        Dim a = input.Split("\")
        For i = 0 To a.Length - 1
            
        Next
End Sub

PM MAIL   Вверх
c05Septh
Дата 27.2.2014, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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


 




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


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

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