![]() |
Модераторы: diadiavova, gambit |
![]() ![]() ![]() |
|
LAKERS |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 10.2.2006 Где: Москва Репутация: нет Всего: нет |
есть текстовый файл, длина его может быть различная, как определить количество символов во всем файле?
|
|||
|
||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 3 Всего: 65 |
FileLen(имя файла)
Это сообщение отредактировал(а) thomas - 24.11.2006, 16:33 -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 5 Всего: 149 |
LAKERS, для файла *.txt количество символов в точности равно количеству байт в файле
![]() Если все же хочешь прочитать файл, а потом узнать, то:
Но ответ будет тот же самый ![]() |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 1 Всего: 92 |
А вдруг там юникод? ![]() -------------------- Да. Именно так. |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 5 Всего: 149 |
Дрон, а вдруг нет?
P.S. Тогда на 2 можно поделить. ![]() |
|||
|
||||
DarkDragon |
|
|||
![]() GradVin ![]() ![]() Профиль Группа: Участник Сообщений: 296 Регистрация: 19.8.2006 Репутация: 5 Всего: 8 |
Я ничего против не имею. Но вот Exception будет ругаться. У него на такие вещи синдром ошибки ![]() (эта ф-ция находится в VB библиотеки, оставшаяся для совместимости.) ivashkanet, тебе нравится выполнять столько работы? ![]()
Этот код, оптимален, для того чтобы получить информацию(не только размер!), относительно файла. А не его внутренее содержимое(для этого код ivashkanet'a подойдет в самый раз) |
|||
|
||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 3 Всего: 65 |
DarkDragon, Привет. По этому поводу меня терзают смутные сомнения. Это в C#, однозначно, отсчет ведется с НУЛЯ. А вот про VB наш препод говорил, что касаемо файлов в бейсике отсчет ведется с ЕДИНИЦЫ. ![]() А здесь про это ничего не написано. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
DarkDragon |
|
|||
![]() 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 ты это проверишь ![]() Единственно в чем ошибся твой препод, это в том что он забыл прокаментировать, что на самом деле отсчет ведется с нуля, так сказать в нутри программы, а счетчик ведется с 1. Вот и вся путаница. |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 1 Всего: 92 |
Брр... Так какая же это путаница? Это всего лишь нумерация элементов начинается с 0. В бейсике массивы могли вообще начинаться с любого индекса ![]() А если в массиве есть один элемент, то и длина его, естественно, равна 1. Это правило работает в нашей вселенной независимо от языка программирования ![]() Это сообщение отредактировал(а) Дрон - 24.11.2006, 20:19 -------------------- Да. Именно так. |
|||
|
||||
LAKERS |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 156 Регистрация: 10.2.2006 Где: Москва Репутация: нет Всего: нет |
||||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 1 Всего: 92 |
А что же это тогда? ![]() Каждая строка заканчивается специальными символами возрат каретки (CR) и перевод строки (LF) с кодами 13 (0xD0) и 10 (0xA0). Это сообщение отредактировал(а) Дрон - 24.11.2006, 21:11 -------------------- Да. Именно так. |
|||
|
||||
DarkDragon |
|
|||
![]() GradVin ![]() ![]() Профиль Группа: Участник Сообщений: 296 Регистрация: 19.8.2006 Репутация: 5 Всего: 8 |
Дрон, Я не говорю что это напутали мелкософтцы, я имею ввиду то что некогда я тоже путался с размерами массива. А если скажем базовое значение счетчика было бы -1, то тогда можно было бы вычеслять так For i = 0 To Arr.Length. Или скажем первый индекс элемента был бы не 0 а 1. Тогда так For i = 1 To Arr.Length. Ведь яже сказал что программа помещает первый элемент под нулевой индекс, а счетчик растет с нуля к единицы ![]()
А вот интерестно, в VB.NET или C#, можно сделать так: VB.NET: Dim sVar As String = "Room" + Chr(10) + "Door" C#: string sVar = "Room\nDoor"; То есть мы не указываем возрат каретки, это автоматом он прибавляет Chr(13)? Тоже интерестно что это за энтеры. |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 5 Всего: 149 |
DarkDragon, не гневись на меня, о великий ![]() Я не давал пример, в котром подсчитывается размер файла. Ведь это легко. Я показал как прочитать файл и посчитать количество его символов ![]()
Кстати, это единственный способ посчитать только "символы" в файле (исключая интеры и прочую дребедень). P.S. Естественно, пример нужно доработать, убрав "лишние" символы из фала либо посчитав только нужные. |
|||
|
||||
DarkDragon |
|
|||
![]() GradVin ![]() ![]() Профиль Группа: Участник Сообщений: 296 Регистрация: 19.8.2006 Репутация: 5 Всего: 8 |
Давай 100$, и я не гневуюсь ![]() Конечно streamreader & writeк, это хорошо, но для того чтобы программист не глючил, когда попытается через него прочитать фаил на русском(получит пустые поля, или вооще ничего), stream'у нужно дать encoder, и тоды всё нисчяк. А по мне лучше исползовать: BinaryReader, BinaryWriteк, а потом се байты в символы путем Chr(Bytes(index)). Теперь о великий ivashkanet не гневись на меня, за такую работу ![]() |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 5 Всего: 149 |
||||
|
||||
![]() ![]() ![]() |
Правила форума VB .NET | |
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |