Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

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

 

  Вопрос: Обработка текстовой информации Добавлено: 28.01.11 17:02  

Автор вопроса:  Андрей
Про посоветовать возможную реализацию следующей задумки:
[img]http://s008.radikal.ru/i305/1101/72/18a6214c8add.png[/img]. Нужно чтобы информация стекалась из этих элементов в подготовленный шаблон текстового документа, где для них заранее определено место.

Ответить

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

Номер ответа: 1
Автор ответа:
 Захарка



Вопросов: 0
Ответов: 42
 Профиль | | #1 Добавлено: 28.01.11 22:57
Впринципе даже я смогу сделать такое) Допустим так:
1) Делаеш массив из значений текстовых полей.
2) Из заранее заготовленного текстового документа берёш строчку, и записываеш в новый, прибавив значение элемента массива равного номеру данной строки.

Ответить

Номер ответа: 2
Автор ответа:
 Захарка



Вопросов: 0
Ответов: 42
 Профиль | | #2 Добавлено: 28.01.11 23:05
Если хотите могу помочь с этой программой.

Ответить

Номер ответа: 3
Автор ответа:
 Андрей



Вопросов: 2
Ответов: 15
 Профиль | | #3 Добавлено: 29.01.11 00:42
Был бы очень признателен за примерный шаблон. Только начинаю изучать VB слабо это представляю.

Ответить

Номер ответа: 4
Автор ответа:
 Захарка



Вопросов: 0
Ответов: 42
 Профиль | | #4 Добавлено: 29.01.11 10:50
вот функция, на вход подаёш массив строк, а она сохраняет в файл, в папке с программой должен быть файл с формой заполнения, и ещщё момент, т.к. VB сейчас под рукой нет, я накорябал функцию на C#, однако отличае функции на VB будет всего в паре слов.
  1.  
  2.         private void save(string[] mass)
  3.         {
  4.             System.IO.StreamWriter SW = new System.IO.StreamWriter(Application.StartupPath + "\\fin.txt");
  5.             System.IO.StreamReader SR = new System.IO.StreamReader(Application.StartupPath + "\\form.txt");
  6.             foreach (string s in mass)
  7.                 SW.WriteLine(SR.ReadLine() + s);
  8.             SW.Flush();
  9.             SW.Close();
  10.             SW.Dispose();
  11.             SR.Close();
  12.             SW.Dispose();
  13.         }




Пример файла form.txt:
ФИО..........................................
Приезд......................................
Отбытие...................................
Количество номеров...............
Тип номера..............................
Стоимость................................

Ответить

Номер ответа: 5
Автор ответа:
 Захарка



Вопросов: 0
Ответов: 42
 Профиль | | #5 Добавлено: 29.01.11 10:57
если будут проблемы с отображением символов в выходном файле то строчку:
  1. System.IO.StreamReader SR = new System.IO.StreamReader(Application.StartupPath + "\\form.txt");

надо заменить на:
  1. System.IO.StreamReader SR = new System.IO.StreamReader(Application.StartupPath + "\\form.txt", Encoding.GetEncoding(1251));

Ответить

Номер ответа: 6
Автор ответа:
 Андрей



Вопросов: 2
Ответов: 15
 Профиль | | #6 Добавлено: 29.01.11 13:05
Спасибо большое. Займусь осмыслением)

Ответить

Номер ответа: 7
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #7 Добавлено: 29.01.11 13:17
Захарка пишет:
        private void save(string[] mass)
        {
            System.IO.StreamWriter SW = new System.IO.StreamWriter(Application.StartupPath + "\\fin.txt";);
            System.IO.StreamReader SR = new System.IO.StreamReader(Application.StartupPath + "\\form.txt";);
            foreach (string s in mass)
                SW.WriteLine(SR.ReadLine() + s);
            SW.Flush();
            SW.Close();
            SW.Dispose();
            SR.Close();
            SW.Dispose();
        }
А че, нынче IO.File.WriteAllLines(string[]) не канает?

Ответить

Номер ответа: 8
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #8 Добавлено: 29.01.11 20:56
Плюс, Захарка, если не проинициализирована переменная mass и на строке foreach (string s in mass) CLR прервет выполнение с ошибкой AgrumentNullException, то код, освобождающий ресурсы SW и SR выполнен не будет.

Ответить

Номер ответа: 9
Автор ответа:
 Захарка



Вопросов: 0
Ответов: 42
 Профиль | | #9 Добавлено: 29.01.11 21:22
1)Насчёт IO.File.WriteAllLines(string[]), а разве большая разница в коде будет? ведь надо будет опять же в цикле сложить массив названий и значений строк, которые берутся из файла, то кода вроде даже побольше будет.
2)про инициализацию mass не подумал(

Ответить

Номер ответа: 10
Автор ответа:
 Андрей



Вопросов: 2
Ответов: 15
 Профиль | | #10 Добавлено: 29.01.11 23:59
Скажите, как можно записать множественное нажатие на кнопку?
У меня есть кнопка и комбобокс, по нажатию на эту кнопку появляется, бывший до этого момента невидимым, еще один комбобокс, и так далее.

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #11 Добавлено: 30.01.11 00:17
Что значит записать множественное нажатие?

Ответить

Номер ответа: 12
Автор ответа:
 Андрей



Вопросов: 2
Ответов: 15
 Профиль | | #12 Добавлено: 30.01.11 00:53
Я имею ввиду, что при последовательном нажатии на одну и ту же кнопку будут производиться последовательные действия с другими элементами.

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #13 Добавлено: 30.01.11 02:06
Ну заведи переменную типа int, при нажатии на кнопку увеличивай ее на единицу.. и в зависимости от значения этой переменной выполняй те или иные действия..

Ответить

Номер ответа: 14
Автор ответа:
 Андрей



Вопросов: 2
Ответов: 15
 Профиль | | #14 Добавлено: 30.01.11 02:34
Спасибо за помощь

Ответить

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



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #15 Добавлено: 30.01.11 05:17
  1.             SW.Flush();
  2.             SW.Close();
  3.             SW.Dispose();
  4.             SR.Close();
  5.             SW.Dispose();

Паранойя это страшное дело. Особенно когда для SW делаешь аж 2 Dispose, а для SR ни одного.
Вызывать Flush не обязательно, так как при закрытии StreamWriter буфер автоматически сбрасывается в поток (есть там ниже по стеку идет вызов Flush).
Вызывать Close и Dispose одновременно не обязательно, так как они выполняют одну и ту же операцию (Close просто вызывает Dispose). Достаточно вызвать что-то одно из них.

Для того чтоб гарантировать корректное освобождение ресурсов в случае исключения, стоит вообще убрать все вызовы Close, Dispose и т.п., и завернуть объекты в блок Using, который гарантирует вызов Dispose для объекта, когда он выходит из области видимости (даже в случае исключений).

В данном случае использование ReadAllLines/WriteAllLines нецелесообразно, только приведет к излишнему расходу памяти. Потоковое чтение/запись, на мой взгляд, здесь выглядят неплохо.

Вероятность что в метод save (Save по принятой нотации, если что) не так высока. Хотя проверку все же стоит сделать.
Гораздо выше вероятность того, что в кол-во строк в файле form не будет соответствовать кол-ву строк в массива mass. И если в файле будет меньше строк, то поток дочитается до конца и тогда уже упадет исключение.

Ответить

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

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



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