Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

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

 

  Вопрос: чтение текстового файла на VB .NET 2010 Добавлено: 08.05.12 22:03  

Автор вопроса:  FAS

Ответить

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

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



Вопросов: 15
Ответов: 93
 Профиль | | #46 Добавлено: 28.02.13 12:32
Ну почему же чушь, правильные соображения. Только в отношении данного примера не очевидно. Лучше бы конечно спросить у разработчиков. Обработка заключается в считывании данных с внешнего носителя, например винчестера. В этом случае скорость считывания скорее больше зависит от ФИЗИЧЕСКОГО уровня. Если провести эксперимент на конкретном компьютере и попробовать считать текстовый файл по старому и по новому, то навряд ли вы почувствуете разницу по времени.

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #47 Добавлено: 01.03.13 09:58
Вот тут позволю себе вмешаться в разговор..
в чем преимущество перед старым способом

Основное преимущество в универсальности подхода к чтению/записи. Ты, как разработчик, однажды освоив приемы работы со Stream сможешь без труда читать/писать будь то обычный файл (FileStream), участок в памяти (MemoryStream) или сетевой поток (NetworkStream). Все они поддерживают одни и те же приемы работы, а это значит что заметно сократишь время изучения и разработки. Это же справедливо практически для всей платформы .Net, освоив однажды, к примеру, IEnumerable или Generic ты сможешь без труда работать со всеми кто их реализует.
Но зачем тогда разработчики Vb.Net оставили возможность старой версии, как в VB6?

Не для кого не секрет что VB6 в свое время был очень популярным и чтобы не оставить миллионную армию разработчиков без куска хлеба они оставили часть функционала именно для облегчения перехода на новую платформу. Как бы то нибыло, после VB6 не имея никаких знаний по ООП, достаточно тяжело все это быстро освоить и у многих это вызывает определнные трудности.
Asaer, твой пример рабочий, но тоже не совсем корректный. Ты иcпользуешь StreamReader который реализует IDisposable, а это говорит о том, что ты обязан был использовать директиву Using (почитай документацию по ней) чтобы гарантировать закрытие потока. Кроме того, если размер файла небольшой то ты мог воспользоваться статической плюшкой File.ReadAllLines которая возвращает массив строк из файла и весь твой код станет гораздо проще и понятнее.
В этом случае скорость считывания скорее больше зависит от ФИЗИЧЕСКОГО уровня

Твоя правда.. В данном случае скорость физического доступа к винту самое слабое место. Особенно это становится заметно на задачах рекурсивного чтения директории.

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #48 Добавлено: 01.03.13 10:49
Asaer, ваш пример мог вполне себе выглядеть так:
  1. ListBox1.Items.AddRange(File.ReadAllLines("c:\1.txt"))

Результат будет тот же.. список будет заполнен строками из текстового файла
p.s. не забудь импортировать System.IO

Ответить

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



Вопросов: 0
Ответов: 8
 Профиль | | #49 Добавлено: 01.03.13 10:51
EROS Сидел писал как раз исправление. Спасибо, век живи век учись )

Ответить

Номер ответа: 50
Автор ответа:
 Asaer



Вопросов: 0
Ответов: 8
 Профиль | | #50 Добавлено: 01.03.13 10:56
Хотя нет, пишет ошибку - невозможно импортировать 1 мерный массив строк в одномерный массив значений ListItem

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #51 Добавлено: 01.03.13 10:57
Сидел писал как раз исправление.

А ты и напиши правильный пример с использованием Using. Людям будет полезно про это знать.. кроме того, твой подход, в некоторых ситуациях, будет гораздо предпочтительней моего.

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #52 Добавлено: 01.03.13 11:02
Хотя нет, пишет ошибку

К сожалению, я много лет не использую VB и не могу посмотреть в чем ошибка.. в С#(WinForms) только что проверил - все работает..

Ответить

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



Вопросов: 0
Ответов: 8
 Профиль | | #53 Добавлено: 01.03.13 11:04
Наверное дело в том, что код в составе вебсайта на ASP, могут быть нюансы

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #54 Добавлено: 01.03.13 11:12
Судя по документации по ASP, метод ListBox.AddRange принимает ListItem[], а это значит что ты не можешь ему туда подсунуть String[]
решения тут 2:
1. Использовать в цикле метод Add который принимает String
2. Конвертировать String[] в ListItem[] через тот же LinQ или написав свою функцию конвертации из 1 строки

Ответить

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



Вопросов: 58
Ответов: 4255
 Профиль | | #55 Добавлено: 01.03.13 11:15
  1.  
  2.             foreach (var line in File.ReadAllLines(@"c:\1.txt"))
  3.             {
  4.                 listBox1.Items.Add(line);
  5.             }

Ответить

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



Вопросов: 0
Ответов: 8
 Профиль | | #56 Добавлено: 01.03.13 12:33
Наверное уже окончательно ))
  1.  
  2. Imports System.IO
  3. Partial Class Default2
  4.     Protected Sub FileStrRead()
  5.         For Each strf As String In (File.ReadAllLines("c:\1.txt")
  6.             Terminals.Items.Add(strf)
  7.         Next
  8.     End Sub
  9. End Class

Ответить

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

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



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