Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Описание используемых стандартных (функции для обработки строкСодержание книги
Поиск на нашем сайте
Stiing$(niimbei, chaiactci) возвращает проку одинаковых символов (chaiaciei) заданной длины (niimbel) Mid$(stung, start|. length|) возвращает строку с заданным количеством символов (length) из cirokh (stung), начиная с заданной позиции (start) el in start больше количесгва символов в строке - возвращаечся прока нулевой длины Если отсутствуег параметр length, то воз праща клея симво1ы от заданной позиции до конца строки Если slung равно Null - возвращается Null lnSti(|stait. |stiingl. stiing2) возвращает первую позицию, с которой одна строка (stiing2) вхолиг в другую (stimgl), как подстрока Start — арифмешческое выражение, значение которого задае! начальную позицию поиска в slungi (если параметр stait не задан, ю поиск иде1 с первой позиции) Возвращаемое значение' если stiingi имеет нулевую длину — О если string! равно Null - Null если stiing2 имеет нулевую длину — start если stiing2 равно Null — Null если string2 не найдено — О если start > длины stimgl — О Для получения доступа к файлу для операции ввода-вывода используется оператор открыгия файла, синтаксис которого следующий Open имя_фаша [For Random] [Access {Read] Write I Read Write}] [{Shared | Lock Read | Lock Read Write}] As [#] номер файла [Len = длина записи} где Foi Random, Access. Read, Wiite, Read Wiite, Shaied, Lock Read, Lock Wiite, Lock Read Wiite, Len - ключевые слова. For Random определяет прямои доступ и принимается по умолчанию Access определяет допустимые операции с файлом (Read — чтение фаипа (ввод). Write - вывод в файл. Read Write — допускается ввод и вывод) Shared, Lock Read, Lock Write, Lock Read Write определяют допустимые операции над фаилом для друшх пользователей сеги (только для сетевых приложении) имя_фа1иа — имя файла (символьная константа или переменная) или путь Номер файла - целочисленное выражение, значение которого должно лежать между 1 и 255 Другие операторы ввода-вывода используют номер открытого файла Len определяет длину записи в байтах (по умолчанию длина записи устанавливается в 128 бант) Длина записи определяется информацией, хранимой в файле, и задается целочисленным выражением и должна быть меньше 32767 байт (см ниже) Все записи одного файла прямого доступа имеют одинаковую длину (записи одного файла последовательного доступа Moiyr иметь разные длины) Несушес1вующии файл создается при выполнении оператора Open Примеры: Open “TESTFILE” For Random As#l Len=Len (Cl ien CWame) 'открывается файл “TESTFILE” прямого 'доступа с номером 1, длина записи 'определяется с помощью встроенной 'функции Len (определение длины строки) Open “ MYFILE.TXT” For Random As #5 Len = 256 Для файлов прямого доступа можно открыть файл с другим номером, не закрывая файл Файл прямого доступа закрывается оператором Close #номер файла где номер фалла - указанный при открытии номер Для ввода и вывода в файлах прямого доступа используются соответственно операторы Get #номер файла, [номер записи], имя_переменной Put #номер файла, [номер записи], имя_переменной где Get, Put - ключевые слова (Get — ввод. Put — вывод). номер записи - арифметическое выражение, значение которого должно лежать в диапазоне от 1 до 2247483647, и которое определяет номер читаемой записи при вводе и номер записи, в которую выводится переменная Если номер записи отсутствует, то ввод — вывод начинается со следующей от текущеи записи (используемый номер в последнем из предыдущих операторов Get и Put) Обратите внимание, что запятые должны присутствовать при отсутствии номера записи (Get #4„FileBufTer) Имя^переменной — имя любой переменной, кроме имени массива (отдельный элемент массива может быть) и имени объекта, значение которой записывается в файл при выводе и значение которой считывается из файла при вводе Примеры Put #3, 4, Massiv(5)' выводится значение 5-го 'элемента массива Massiv в 4-ю запись J-го файла. Get #fileNum, I, RecVar 'ич 1-й -записи файла с 'номером liieNun’ считывается 'значение переменной RecVar. Пример программы. Создадим форму с двумя командными кнопками и две процедуры обработки событии “Click” для каждой кнопки По щелчку кнопки “Ввод” выводится окно для последовательного ввода пяти символьных строк и их записи в фаил прямого доступа. По щелчку кнопки “Вывод” выводится окно для ввода номера требуемои записи фаила и запись, соответствующая введенному номеру, выводится в окне вывода. Текст процедур обработки событии' Private Sub Commandl_C-Lick () i^im PEREMLN Ач String * 15 Open “Prirrb^le” For Random As 5 Len - 15 For I - 1 ^r b PEREMEN = InputBox(“Введите запись” + Str(I)) Put #1-, T, PEPEMEN Next r Close ^ End Sub Private Sub Commcind2 Click () Dim PEREMEN As String * 15 Open “Primflie” For Random As 5 Len = 15 К = InputBox(“Введите номер записи для вывода”) Get #5, К, PEREMEN MsgBox Str(K) +' “-ая запись” + “ “ + PEREMEN Close #5 Kill “PrimFile” End Sub Еще одним преимуществом файлов прямого доступа является возможность использования индексов записеи Если для реорганизации фаила последовательного доступа (добавление, удаление, перестановка записей) необходимо сначала его прочитать, затем реорганизовать данные, а потом переписать фаил на диск в соответствии с новой реорганизациеи, то используя индекс, можно реорганизовывать индекс без реорганизации самого фаила Это значительно увеличивает скорость обработки больших объемов информации Чтобы создать индекс, вначале создается массив целых чисел, в котором каждый элемент содержит один (свой) номер записи фаила прямого доступа Этот массив используется для определения номера записи, к которой нужно обратиться Такая организация хранения записи файла называется индексированием записи. Записи одного файла могут иметь несколько разных индексов для организации различных алгоритмов работы с одним и тем же файлом. Для массива индексов Index () оператор ввода для связанного с этим индексом файла имеет вид Get ftFiieNiim. Imlex(l), RecVar Первоначально каждый элемент массива Index () содержит свой собственный номер: Index (1) = 1 Index (2) = 2 “.', Index (3) = 3 Результат использования такого массива для доступа к записям файла идентичен прямому доступу к этому файлу. Для того чтобы переставить местами, например, вторую и третью запись, вместо реальной перестановки записей достаточно изменить значения индексов следующим образом: Index (I) = 1 Index (2) = 3 Index (3) = 2 Пример программы. Добавим к предыдущей программе процедуру обработки события щелчка мыши по форме. Private Sub Form_C]-ick () Dim PEREMEN As String * 15, PEREMEN1 As String * 15 Static thelndex(l To 5) As Integer Open “PrimFile” For Random As 5 Len = 15 For I = 1 To 5 thelndex(l) = I Next I 11 = Val(InputBox(“Введите номер 1-й записи для перестановки”)) Get #5, thelndex(ll), PEREMEN 12 = InputBox(“Введите номер 2-й записи для перестановки”) Get #5, thelndex(12), PEREMEN1 Print Str(thelndex(ll)) + “-ая запись “ + PEREMEN Print Str(thelndex(12)) + “-ая запись “ + PEREMEN1 thelndex(ll) = 12 thelndex(12) = II Get #5, thelndex(ll), PEREMEN Get #5, thelndex(12), PEREMEN1 Print Str(Il) + “-ая запись “ + PEREMEN Print Str(I2) + “-ая запись “ + PEREMEN1 Close #5 Kill “PrimFile” End Sub В процедуре вводится массив thelndex для задания индексов записей используемого файла. Первоначально значениям массива последовательно присваиваются значения от 1 до 5 (индекс записи совпадает с ее реальным номером’в файле). Далее вводятся значения двух номеров записей для их перестановки, Private Sub Commandl_Click() Nzapisi = 1 Nzapisil = 1 Open “TestFile” For Random Access Read Write As #10 Len = 70 Text 1.Enabled = True Text2.Enabled = True Text3.Enabled = True Text4.Enabled = True Text7.Enabled—True Textl.SetFocus Commandl.Enabled = False End Sub Private Sub Command2_Click() Dim Peremen As Primer Textl.Text = “” Text2.Text = “” Text3.Text = “” Text4.Text = “” If Nzapisil < Nzapisi Then Get #10, Nzapisil, Peremen Textl.Text = Peremen.Familia Text2.Text = Peremen.Dolgnost Text3.Text = Peremen.Podrazdeienie Text4.Text = Peremen.Zarplata End If Nzapisil = Nzapisil + 1 End Sub Private Sub Command3_Click() Textl.Text = “” Text2.Text = “” Text3.Text = “” Text4.Text == “” Text5.Enabled = True Text6.Enabled = True Text5.Text = “” Text6.Text = “” Text5.SetFocus End Sub Private Sub Command4_Clicki’ Dim Peremen As Primer Dim Zaprosi As String * 20, Zapros2 As String * 20, Sum As Single Dim Pri As Integer, Pr2 As Integer, Kol As integer, Rez As Single Pri = -1: Pr2 = -1: Nzapisil = 1: Kol = 0: Sum = 0 Zaprosi = Text5.Text: Zapros2 = Text6.Text Do While Nzapisil < Nzapisi Get #10, Nzapisil, Peremen If Peremen.Podrazdeienie - Zaprosi Then Pri = 1 End If If Peremen.Doignost = Zapros2 Then Pr2 - 1 End If If Peremen.Podrazdeienie = Zdprosi And Peremen.Doignost = Zapros2 Then Kol -= Kol + 1: Sum = Sum + Val(Peremen.Zarplata): Rez = Sum / Kol End If Nzapisil = Nzapisil + 1 Loop If Pri < 0 Then • • MsgBox “Такого подразделения нет” Text5.Text = “”: GoTo Finish6 End If If Pr2 < 0 Then MsgBox “Такой должности нет” Text6.Text = “”: GoTo Finish6 End If Text7.Text = Str$(Rez) Command5.Enabled =- True Finish6: End Sub Private Sub Cun-iniand5_Ciick () Cl?Qse„#10 Kill “TeS-tFile” End End Sub .Private Sub Form_Load() ' Commandl.Enabled = True Command2.Enabled - False Command3.Enabled = False Command4.Enabled a False Хотя можно указать запись длиной 1 байт, компьютер на самом деле прочитает в буфер памяти один или более секторов. Когда программа читает данные из дискового файла, она читает их из буфера. Когда прочитывается весь буфер, компьютер читает в этот буфер следующие несколько секторов из файла. Аналогично данные записываются в дисковый файл: сначала они записываются в буфер памяти, а когда он заполняется, то записываются на диск. Предположим, что размер дискового сектора 512 байтов, а длина записи файла 260 байтов. При такой длине записи большинство записей файла будут расположены в двух секторах (например, запись 2 использует байты с 261 по 512 первого сектора и с 1 по 8 байт второго сектора) и для чтения с диска такой записи потребуется прочесть два сектора. Использование вместо 260-байтных записей 256-байтных обеспечивает упаковку в один дисковый сектор двух полных записей и позволяет для ввода одной записи читать только один сектор. Таким образом, выбор длины записи определяется типом и длиной передаваемых данных и размерами дисковых секторов. Возможно, что реальная длина передаваемых данных будет меньше длины записи, указанной параметром Len. Если длина читаемых данных меньше длины, указанной параметром Len, то место до границы следующей записи заполняется содержанием буферного файла. Это нежелательно и следует стремиться к согласованию реальной длины передаваемых данных с задаваемой длиной записи с учетом указанных выше замечаний. Пример программы. Записи файла прямого доступа содержат информацию о сотрудниках подразделения предприятия (структура записей файла: фамилия, должность, подразделение, заработная плата). Программа обеспечивает ввод исходной информации в файл и получение информации по запросу: средняя заработная плата для заданных должности и подразделения. Текстовые окна “Фамилия”, “Должность”, “Подразделение”, “Зарплата” (имена соответственно Textl, Text2, Text3, Text4) используются для ввода исходной информации и просмотра записей файла. Текстовые окна “Должность”, “Подразделение” (имена соответственно Text5, Text6) для ввода запроса. Текстовое окно “Результат” (имя Text?) используется для вывода результата и предупреждении о не заполнении необходимых текстовых окон. Коммандные кнопки “Начало/Ввод”, “Просмотр файла”, “Ввод запроса”, “Обработка запроса”. “Конец” (имена соответственно Command I, Command2, Command3, Command4, Command5) обеспечивают переход к функциональным алгоритмам. Оператор объявления пользовательского типа данных помещаются в модуль module l.bas. Текст процедуры обработки событий: Type Primer Familia As String * 20 Dolgnost As String * 20 Podrazdelenie As String * 20 Zarpiata As String * 10 End Type Dim Nzapisi, Nzapisil As Integer Dim Peremen As Primer Private Sub Coirimandl_Cllck () Nzapisi = 1 Nzapibil 1 Open “TestFile” For Random Access Read Write As #10 Len = 70 Textl.Enabled - True Text2.Enabled -= True Text3.Enabled—True Text 4.Enablea = True Text?.Enabled - True Textl.SetFocus Commandl.Enabled -= False End Sub Private Sub Command2_Click () Dim Peremen As Primer Textl.Text = “” Text2.Text - “” Text3.Text - “” Text4.Text = “” If Nzapisil <” Nzapisi Then Get #10, Nzapisil, Peremen Textl.Text = Peremen.Familia Text2.Text =- Peremen.Dolgnost Text3.Text = Peremen.Podrazdeleni Text4.Text = Peremen.Zarplata End If Nzapisil = Nzapisil + 1 End Sub Private Sub Command3__Click() Textl.Text = “” Text2.Text = “” Text3.Text =• “” Text4.Text = “” Text5-Enabled = True Text 6.Enabled = True Text5.Text = “” TextG.Text = “” Text5.SetFocus End Sub Private Sub Conmand4_Clic1 Dim Peremen As Primer Dim Zaprosi As baring - ^.u, ^аргоь^ as String * 20, Sum As Sinqie Dim Pri As Integer, Pr2 As Integer, Koi As Integer, Rez As Single Pri - -1: Pr2 - -1: Nzapisil = 1: Kol = 0: Sum - О Zciprosi - Text’).Text: Zapros2 = Text6.Text Do While N^dpibil “•’zapisi ‘^rit #1’, Nzdpisil, Peremen If Peremen. Pcmra^aeienie - Z^prosi Th>.’n t’rl -= 1 End If If Peremen.Dolgnost = Zapros2 Then Pr2 - 1 End If If Peremen. Podrazdelenie - Zciprosi And Peremen.Dotqnosr Zdpros2 Then Kol k’)i + 1: Sun suit + Val (E’fc r emen. Zdrplata): Rez - iiiim / Koi End If N?apisil - ^Zcioisil + 1 Loop II: Pri < (• T^hen MsqBox “Tai- ого псдразд&ления нет” Tex^J.rext - “”: GoTo l-mishb End If If Pr2 < 0 Then MsgBox “Такой допкно ••ти нет” r^xtt.rex”- - “”: u^Tu Finishfa End I* Text /.It >;r Str$;Re.i) i”^mmdndb. Fn,jbi(ci =- ‘I rue F i n i a n о: End Sub briV.itt S л1 ‘.:l”LcU!f.t^ CLlCK(, ^1оъе #1-; Kill “Tebtr.i-“ Enci bnd Suo Private Suo ruriii L’^ad () Comricinal.Enabit ‘•i True Coi’mdnd2. Er.JDied r.aisp Command i. EnaO-l ed - i-alse Command4. Eriab i-ed - ‘: ^lae Commands.Enabled = False Textl.Enabled =- False Text2.Enabled = False Text3.Enabled = False Text4.Enabled = False Text5.Enabled = False Text6.Enabled = False Text7.Enabled = False End Sub Private Sub Textl_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then If Textl.Text = “” Then Label7.Caption = “Предупреждение” Text7.Text = “Введите фамилию” Textl.SetFocus GoTo Finish End If If Label7.Caption = “Предупреждение” Then Label7.Caption = “Результат” Text7.Text = “” End If Text2.SetFocus End If Finish: End Sub Private Sub Text2 Keypress(KeyAscii As Integer) If KeyAscii ^ 13 Then If Text2.Text = “” Then Label7.Caption = “Предупреждение” Text7.Text = “Введите должность” Text2.SetFocus GoTo Finishi End If If Label7.Caption = “Предупреждение” Then Label7.Caption = “Результат” Text7.Text = “” End If Text3.SetFocus End If Finishi: End Sub Private Sub Text3 Keypress(KeyAscii As Integer) If KeyAscii ~= 13 Then If Text3.Text = “” Then Label7.Caption = “Предупреждение” Text7.Text - “Введите подразделение Text3.SetFocus GoTo Finish2 End If If Label7.Caption = “Предупреждение” Then Ldbei7.Caption = “Результат” Text 7.Text = “” End If Text4.SetFocus End If Finish2: End Sub Private Sub Text4_KeyPress(KeyAscii As Integer) Dim Peremen As Primer If KeyAscii =. 1 3 Then It Text 4.Text = “” Then Labei7.Caption = “Предупреждение” Text7.Text = “Введите зарплату” Text4.SetFocus GoTo Finish3 End If If Labei7.Caption = “Предупреждение” Then Label7.Caption = “Результат” Text7.Text = “” End If Finish3: Peremen.Familia = Textl.Text Peremen.Dolgnost = Text2.Text Peremen.Podrazdelenie = Text3.Text Peremen.Zarplata = Text4.Text Put #10, Nzapisi, Peremen Nzapisi = Nzapisi + 1 Command2.Enabled = True Command3.Enabled = True
|
||||
Последнее изменение этой страницы: 2016-08-12; просмотров: 218; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.255.170 (0.009 с.) |