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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> считывание .txt, надо подсчитать количество символов 
V
    Опции темы
LAKERS
Дата 24.11.2006, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



есть текстовый файл, длина его может быть различная, как определить количество символов во всем файле?
PM MAIL ICQ   Вверх
thomas
Дата 24.11.2006, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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



FileLen(имя файла)

Это сообщение отредактировал(а) thomas - 24.11.2006, 16:33


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
ivashkanet
Дата 24.11.2006, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



LAKERS, для файла *.txt количество символов в точности равно количеству байт в файле  smile 
Если все же хочешь прочитать файл, а потом узнать, то:
Код

        Dim streamReader As New StreamReader("c:\AUTOEXEC.BAT")

        Dim str As String = streamReader.ReadToEnd()
        streamReader.Close()

        Console.Write(str.Length)

Но ответ будет тот же самый smile
PM MAIL WWW ICQ   Вверх
Дрон
Дата 24.11.2006, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


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

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



Цитата(ivashkanet @  24.11.2006,  16:22 Найти цитируемый пост)
для файла *.txt количество символов в точности равно количеству байт в файле 

А вдруг там юникод? smile



--------------------
Да. Именно так.
PM   Вверх
ivashkanet
Дата 24.11.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



Дрон, а вдруг нет?
P.S. Тогда на 2 можно поделить. smile

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


GradVin
**


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

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



Цитата(thomas @  24.11.2006,  16:17 Найти цитируемый пост)
FileLen(имя файла)

Я ничего против не имею. Но вот Exception будет ругаться. У него на такие вещи синдром ошибкиsmile
(эта ф-ция находится в VB библиотеки, оставшаяся для совместимости.)

Цитата(ivashkanet @  24.11.2006,  16:22 Найти цитируемый пост)
Выделить всёкод Visual Basic
        Dim streamReader As New StreamReader("c:\AUTOEXEC.BAT")
        Dim str As String = streamReader.ReadToEnd()
        streamReader.Close()
        Console.Write(str.Length)


ivashkanet,  тебе нравится выполнять столько работы?smile

Код

   Dim fInfo As New IO.FileInfo ([FilePath])
   Dim size As Long = fInfo.Length ' Вот тебе и размер файла. Правда нужно отнять 1, т. к. счет ведется с нуля.

Этот код, оптимален, для того чтобы получить информацию(не только размер!), относительно файла. А не его внутренее содержимое(для этого код ivashkanet'a подойдет в самый раз)
PM MAIL   Вверх
thomas
Дата 24.11.2006, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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




Цитата

Dim size As Long = fInfo.Length ' Вот тебе и размер файла. Правда нужно отнять 1, т. к. счет ведется с нуля.


DarkDragon
Привет.
По этому поводу меня терзают смутные сомнения. Это в C#, однозначно, отсчет ведется с НУЛЯ. А вот про VB наш препод говорил, что касаемо файлов в бейсике отсчет ведется с ЕДИНИЦЫ.  smile 

А здесь про это ничего не написано.



--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
DarkDragon
Дата 24.11.2006, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GradVin
**


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

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



thomas привет.

В правду в VB.NET для пользователей ведется отсчет с 1, но это только эллюзия, т. к. для получения первого элемента  массива, нужно указать 0 индекс.
Пример: Dim ArrStr() As String = {"I","You","We"}. Если ты проверишь длину(ArrStr.Length) этого массива то получишь 3 (т. к. по человечески ноль это и есть ничего, но для программы ноль - это первый элемент массива). И для того чтобы обработать эту строку при помощи цикла For, нужно от длины отнять 1 (т. к. для программы 3 - это уже четвертый элемент массива). И по этому получается For i = 0 To ArrStr.Length - 1 (3 - 1 = 2). Этим мы переводим длину для человека в длину для программы. Если же ты не отнимешь 1, то получешь ошибку. По этому говоря о том что VB.NET ведет отсчет с нуля а не с единицы, относительно программы, я в полной мере прав, но относительно его счетчика нет. Так как счетчик начинает считать с единицы.

Попробуй вот так:
Console.WriteLine ("{0}, {1}, {2}: Array Length = {4}",ArrStr(0), ArrStr(1),ArrStr(2), ArrStr.Length.ToString()).

Знаешь здесь действительно путаница, сама программа помещает первый элемент под индекс 0, а размер её становится 1. Это по тому что в VB.NET, C# пустой размер массива эта 0, но когда мы добавляем новый элемент, то счетчик растет, и получается 1. Так и получается что размер 1 говорит что в массиве всего 1 элемент, но его индекс равен 0.

В C#, между прочим такая же путаница:
string[] arrstr = {"I","You","We"};
Console.WriteLine ("{0}, {1}, {2}, {3}", arrstr[0], arrstr[1], arrstr[2], arrstr.Length.ToString());

И в C# размер массива ты получешь тоже 3.
Все это я проверил на своем любимом VS.NET 2003, Framework v1.1. Точно незнаю как в 2005, но думаю thomas ты это проверишьsmile

Единственно в чем ошибся твой препод, это в том что он забыл прокаментировать, что на самом деле отсчет ведется с нуля, так сказать в нутри программы, а счетчик ведется с 1.
Вот и вся путаница.
PM MAIL   Вверх
Дрон
Дата 24.11.2006, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


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

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



Цитата(DarkDragon @  24.11.2006,  19:35 Найти цитируемый пост)
Знаешь здесь действительно путаница, сама программа помещает первый элемент под индекс 0, а размер её становится 1.

Брр... Так какая же это путаница? 

Это всего лишь нумерация элементов начинается с 0.
В бейсике массивы могли вообще начинаться с любого индекса smile

А если в массиве есть один элемент, то и длина его, естественно, равна 1. Это правило работает в нашей вселенной независимо от языка программирования  smile 

Это сообщение отредактировал(а) Дрон - 24.11.2006, 20:19


--------------------
Да. Именно так.
PM   Вверх
LAKERS
Дата 24.11.2006, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(ivashkanet @  24.11.2006,  16:22 Найти цитируемый пост)
LAKERS, для файла *.txt количество символов в точности равно количеству байт в файле   

у меня в файле 590 символов с пробелами, и еще 10 Энтеров, но они не символы, а размер 609 Байт
PM MAIL ICQ   Вверх
Дрон
Дата 24.11.2006, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


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

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



Цитата(LAKERS @  24.11.2006,  20:48 Найти цитируемый пост)
и еще 10 Энтеров, но они не символы

А что же это тогда? smile
Каждая строка заканчивается специальными символами возрат каретки (CR) и перевод строки (LF) с кодами 13 (0xD0) и 10 (0xA0).


Это сообщение отредактировал(а) Дрон - 24.11.2006, 21:11


--------------------
Да. Именно так.
PM   Вверх
DarkDragon
Дата 25.11.2006, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GradVin
**


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

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



Цитата(Дрон @  24.11.2006,  20:10 Найти цитируемый пост)
Брр... Так какая же это путаница? 


Дрон, Я не говорю что это напутали мелкософтцы, я имею ввиду то что некогда я тоже путался с размерами массива. А если скажем базовое значение счетчика было бы -1, то тогда можно было бы вычеслять так For i = 0 To Arr.Length. Или скажем первый индекс элемента был бы не 0 а 1. Тогда так For i = 1 To Arr.Length. Ведь яже сказал что программа помещает первый элемент под нулевой индекс, а счетчик растет с нуля к единицыsmile

Цитата(Дрон @  24.11.2006,  21:08 Найти цитируемый пост)
Каждая строка заканчивается специальными символами возрат каретки (CR) и перевод строки (LF) с кодами 13 (0xD0) и 10 (0xA0).


А вот интерестно, в VB.NET или C#, можно сделать так:
VB.NET: Dim sVar As String = "Room" + Chr(10) + "Door"
C#: string sVar = "Room\nDoor";
То есть мы не указываем возрат каретки, это автоматом он прибавляет Chr(13)?

Цитата(LAKERS @  24.11.2006,  20:48 Найти цитируемый пост)
10 Энтеров, но они не символы

Тоже интерестно что это за энтеры.
PM MAIL   Вверх
ivashkanet
Дата 27.11.2006, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



Цитата(DarkDragon @  24.11.2006,  16:14 Найти цитируемый пост)
ivashkanet,  тебе нравится выполнять столько работы?

DarkDragon, не гневись на меня, о великий  smile 

Я не давал пример, в котром подсчитывается размер файла. Ведь это легко.
Я показал как прочитать файл и посчитать количество его символов smile
Цитата
Если все же хочешь прочитать файл, а потом узнать, то:


Кстати, это единственный способ посчитать только "символы" в файле (исключая интеры и прочую дребедень).
P.S.  Естественно, пример нужно доработать, убрав "лишние" символы из фала либо посчитав только нужные.
PM MAIL WWW ICQ   Вверх
DarkDragon
Дата 27.11.2006, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GradVin
**


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

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



Цитата(ivashkanet @  27.11.2006,  09:54 Найти цитируемый пост)
DarkDragon, не гневись на меня, о великий  smile 


Давай 100$, и я не гневуюсь  smile 

Цитата(ivashkanet @  27.11.2006,  09:54 Найти цитируемый пост)
Кстати, это единственный способ посчитать только "символы" в файле (исключая интеры и прочую дребедень).
P.S.  Естественно, пример нужно доработать, убрав "лишние" символы из фала либо посчитав только нужные. 


Конечно streamreader & writeк, это хорошо, но для того чтобы программист не глючил, когда попытается через него прочитать фаил на русском(получит пустые поля, или вооще ничего), stream'у нужно дать encoder, и тоды всё нисчяк.

А по мне лучше исползовать:
BinaryReader, BinaryWriteк, а потом се байты в символы путем Chr(Bytes(index)).
Теперь о великий ivashkanet не гневись на меня, за такую работу smile 
PM MAIL   Вверх
ivashkanet
Дата 27.11.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



 smile 
Цитата(DarkDragon @  27.11.2006,  12:08 Найти цитируемый пост)
Теперь о великий ivashkanet не гневись на меня, за такую работу smile  

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

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

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


 




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


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

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