Считать файл

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Считать файл

Сообщение keks-n » 16.11.2005 (Ср) 14:56

Вы наверное на меня ругаться будете, но сам вспомнить не могу. :cry:

Помнится был метод файл загнать в массив байтов, быстрый метод.
А то я по байтику читаю и массив, потом следущий и т.д.

Так у меня 20КБ секунд пять грузятся(что и не нравиться).

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.11.2005 (Ср) 14:58

Грузи не по байту, а по 100Кб.
Lasciate ogni speranza, voi ch'entrate.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 16.11.2005 (Ср) 15:04

Точно, ступил я, ступил, тока.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 16.11.2005 (Ср) 15:05

API финкция ReadFile его сразу весь прочитать даёт, оказывается...
:lol:

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.11.2005 (Ср) 16:23

Очень смешно.

dim b() as byte
open "c:\1.txt" for binary access read as #1
redim b(1 to lof(1))
get #1, , b
close #1
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 16.11.2005 (Ср) 17:21

keks-n писал(а):API финкция ReadFile его сразу весь прочитать даёт, оказывается...
:lol:

Это и VB дает. Но рекомендуется представить себе ситуацию, когда файл будет иметь размер 4Гб и выше.
Lasciate ogni speranza, voi ch'entrate.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 16.11.2005 (Ср) 18:37

Спасибо (По поводу четырёх гигов), но у меня файлы своего формата и размерами от 20 КБ, до 40МБ примерно.

Adolf
Новичок
Новичок
 
Сообщения: 44
Зарегистрирован: 30.01.2005 (Вс) 11:01
Откуда: Ленинградская область, город Гатчина

Сообщение Adolf » 19.11.2005 (Сб) 18:08

У вопрос несколько иной и не относится к теме, потому что я уже около часа пытался создать тему и никак не получалось :( - минут 10 грузится, после этого выдает ошибку.

В общем у меня такая проблемма:
У меня есть файл, допустим его название 1.txt - там я со второй строчки, именно со второй (т.к у меня в первой строчке другие данные), как бы так сказать, хочу считать числа, все они разделены пробелом, т.е. ни каких запятых и тому подобных разделений, они в отрезке от 1 до 100 и я хочу проверить, каких чисел не хватает. Как мне это сделать?

Например, мне дано во второй строчке:
1 1 3 4 10 34 - и мне нужно узнать сколько чисел не хватает для сотни (в нашем случае 95 чисел, т.к 1 1 - это одно число - оно просто повторяется). Пожалуйста помогите, очень нужно, желательно если бы привели пример исходного кода.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 20.11.2005 (Вс) 1:03

Делаем функцию, возв. то, что тебе надо. В аргументе твоя вторая строчка.

Код такой:
Код: Выделить всё

Public Function GetNumbersRemain(sTxt As String) As Byte
   Dim i            As Byte
   Dim sWasStr As String
   nmsa = Split(sTxt," ")
   GetNumbersRemain = 100
   For i = LBound(nmsa) To UBound(nmsa)
      If 0 = InStr(1, sWasStr, "@" & nmsa(i) ) Then
         sWasStr=sWasStr+"@" & nmsa(i)
         GetNumbersRemain=GetNumbersRemain - 1
      End If
   Next i

End Function


Вот и вся функция. Если не разберешься пиши, я всегда рад всем помочь...

ПС: Толко не далай так GetNumbersRemain("") или GetNumbersRemain("@@@@") :?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 20.11.2005 (Вс) 1:08

Делаем функцию, возв. то, что тебе надо. В аргументе твоя вторая строчка.

Код такой:
Код: Выделить всё

Public Function GetNumbersRemain(sTxt As String) As Byte
   Dim i            As Byte
   Dim sWasStr As String
   nmsa = Split(sTxt," ")
   GetNumbersRemain = 100
   For i = LBound(nmsa) To UBound(nmsa)
      If 0 = InStr(1, sWasStr, "@" & nmsa(i) ) Then
         sWasStr=sWasStr+"@" & nmsa(i)
         GetNumbersRemain=GetNumbersRemain - 1
      End If
   Next i

End Function


Вот и вся функция. Если не разберешься пиши, я всегда рад всем помочь...

ПС: Толко не далай так GetNumbersRemain("") или GetNumbersRemain("@@@@") :?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

PILIGRIM
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 25.07.2005 (Пн) 22:35

Копирование бинарного файла

Сообщение PILIGRIM » 20.11.2005 (Вс) 22:58

У меня тоже вопрос на счет работы с файлами и к стати тоже никак не могу создать новую тему.
Подскажите пожалуйста как в Visual Basic можно организовать копирование бинарного файла. Это должно выглядеть примерно так:
Открываем один файл для чтения, второй для записи и через цикл перемещаем информацию из одного файла в другой.
Заранее спасибо. :D

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.11.2005 (Пн) 14:37

PILIGRIM, не толко ты не можешь... В последнее время в phpBB наблюдаются глюки...

А теперь к делу. Чтобы файл читать последовательно, по байтам его нужно открывать For Binary. Вообщето можно сделать всё разом, загнав данные из файла в массив, но если тебе нужен цикл, пожалуй-100-а.

Нужно объявить переменную btBuffer. Короче читай пример:
Код: Выделить всё

Dim btBuffer         As Byte
Dim sSrcFileName As String
Dim sDstFileName As String
Dim hF1               As Long
Dim hF2               As Long

sSrcFileName = "ПУТЬ ФАЙЛА ОТКУДА ЧИТАТЬ"
sDstFileName = "ПУТЬ ФАЙЛА КУДА ЗАПИСЫВАТЬ"

'////////// Вот пошло самое главное //////////////////////////

hF1 = FreeFile
hF2 = FreeFile

Open sSrcFileName For Binary As #hF1
Open sSrcFileName For Binary As #hF2
   For i = 1 to LOF(hF1)
      Get #hF1, i, btBuffer
      '---здесь можно изменить содержимое
      '    переменной btBuffer, значение которой будет записано
      '    в файл



      '-------------------------------
      Put #hF2, i, btBuffer
   Next i
Close #hF2
Close #hF1




Я предполагаю что ты пытаешься это сделать с помощью For Input, For Output, и копируется только часть файла. Это вызвано тем, что твой бинарный файл содержит байт со значением 0 (так назваемый null-символ). ASCII символ 0 считается символом EOF, т.е. байтом, сообщающим что текстовый файл закончен.

А если не секрет, что за прогу ты делаешь? - Шифровщик данных что ли?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.11.2005 (Пн) 14:47

По байту можно до второго пришествия читать.
Лучше для этих целей завести буфер (байтовый массив) размером на 50-100Кб.
Lasciate ogni speranza, voi ch'entrate.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.11.2005 (Пн) 14:48

Кстати, ПИЛИГРИМ, в моей статье Создание архиватора или простого упаковщика данных есть конкретный действующий пример побайтного считывания и побайтной записи в файл, посмотри там ...
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

    TopList