<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3308179</guid>
        <pubDate>Fri, 03 May 2013 12:52:46 +0000</pubDate>
        <title>Ввод и вывод информации. Файлы</title>
        <link>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3308179</link>
        <description><![CDATA[B.V.: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=328478&view=findpost&p=3308140'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Buka1214 &#064; <time class="tag-quote__quoted-time" datetime="2013-05-03T14:02:15+04:00">03.05.13, 10:02</time></span><div class='quote '>Как решить эту задачу? Спасибо.</div></div><br>
Выводить в соответствующий элемент управления. Судя по соседней теме, ты уже к этому решению пришел. На будущее: одна тема -- один вопрос.<br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Сообщения были разделены в тему &quot;<a class='tag-url' href='http://forum.sources.ru/index.php?showtopic=376350' target='_blank'>Как создать запись в файл информации, выведенной на форму?</a>&quot;</span></span>]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3308140</guid>
        <pubDate>Fri, 03 May 2013 10:02:15 +0000</pubDate>
        <title>Ввод и вывод информации. Файлы</title>
        <link>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3308140</link>
        <description><![CDATA[Buka1214: Статью осознал, но у меня пустяковая проблема. На форму Form1 вывожу данные, в три этапа. По статье после каждого этапа после вывода через print на форму я записываю все это через print# в файл. Это получилось. Но хотелось бы записать в файл именно выведенную информацию на форме, т. е. форму использовать как некоторую переменную, в которую записана информация и которая записывается в файл. Команда put имя Form1 не понимает <br>и команда Print #1,Form1 не принимается. Как решить эту задачу? Спасибо.]]></description>
        <author>Buka1214</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3075256</guid>
        <pubDate>Wed, 08 Feb 2012 17:55:35 +0000</pubDate>
        <title>Ввод и вывод информации. Файлы</title>
        <link>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3075256</link>
        <description><![CDATA[Bubaylo: Ребяты, нужен совет.<br>Я веду свою БД. Обыкновенный двоичный файл, Get #ff/Put #ff... Так вот, переменную, которую я сохраняю - она массив собственного типа. Размерность подошла к 2000. В нутри этого так же есть массивы. Сам файл занимает 9 с лишним мегабайт. Отсюда вытикают последствия - медленно работает. Так вот, собственно, вопрос такой. Как лучше организовать, создать какой-то класс, который будет заниматься тем, что будет создавать буфер сохранений, и по-очереди эти сохранения записывать БД, тем самым разгрузим основную программу. Как бы накидали того, что надо сохранить - а как быстро это сделается - и не волнует никого. Но тогда памяти будет кушать много. Как быть? Использовать уже существующие движки - не вариант.]]></description>
        <author>Bubaylo</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3064623</guid>
        <pubDate>Sun, 22 Jan 2012 12:33:23 +0000</pubDate>
        <title>Ввод и вывод информации. Файлы</title>
        <link>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3064623</link>
        <description><![CDATA[Akina: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=328478&view=findpost&p=3064621'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>DIS &#064; <time class="tag-quote__quoted-time" datetime="2012-01-22T12:27:26+00:00">22.01.12, 12:27</time></span><div class='quote '>зачем перед дексриптором файла указывается знак &quot;#&quot;?</div></div><br>
Это в русском языке существует символ &quot;№&quot;... а в аглицком его роль выполняет символ &quot;#&quot;.<br>
И вообще называть его &quot;дескриптор&quot; - не очень правильно. Это именно номер. Номер записи в таблице открытых файлов. А вот уже сама запись и есть дескриптор (описАтель)...]]></description>
        <author>Akina</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3064621</guid>
        <pubDate>Sun, 22 Jan 2012 12:27:26 +0000</pubDate>
        <title>Ввод и вывод информации. Файлы</title>
        <link>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3064621</link>
        <description><![CDATA[DIS: Для меня остался непонятным один вопрос - зачем перед дексриптором файла указывается знак &quot;#&quot;? Для того чтобы отличить, например, Print &quot;...&quot; и Print #filehandle? Тогда зачем решетки в других операторах?]]></description>
        <author>DIS</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3059848</guid>
        <pubDate>Fri, 13 Jan 2012 23:21:20 +0000</pubDate>
        <title>Ввод и вывод информации. Файлы</title>
        <link>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3059848</link>
        <description><![CDATA[UFOpera: Рецепт от http://support.microsoft.com/ ищи Работа с файлами двоичного доступа<br>
Запись файлов, открытых для двоичного доступа<br>
Поскольку записи с двоичным доступом может быть переменной длины, бывает фактически хранятся сведения о размере каждого поля и записи, таким образом, чтобы его можно прочитать успешно. Хороший способ добиться этого является хранение целое число с каждой строкой, чтобы указать длину строки. Ниже приведен пример создания такого файла.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Type Person</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;LName as String</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FName as String</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Age as Integer</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; End Type</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; Sub WriteOneRecord(PRecord as Person)</div><div class="code_line">&nbsp;&nbsp; Dim StrSize as Integer</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;&#39; Write the LName field and indicate the length of LName</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;&#39; because it is a variable-length string.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;StrSize = Len(PRecord.LName)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Put #1,,StrSize</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Put #1,,PRecord.LName</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;&#39; Write the FName field and indicate the length of FName</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;&#39; because it is a variable-length string.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;StrSize = Len(PRecord.FName)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Put #1,,StrSize</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Put #1,,PRecord.FName</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;&#39; Write the Age field - this is type integer so it is not</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;&#39; necessary to indicate a length.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Put #1,,PRecord.Age</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; End Sub</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; Sub WriteBinary()</div><div class="code_line">&nbsp;&nbsp; Dim P as Person</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;&#39; Create a new file and open it for Binary access.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Open &quot;BINARY.TXT&quot; For Binary As #1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;&#39; Create and write the first record.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;P.LName = &quot;Doe&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;P.FName = &quot;Jane&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;P.Age = 9</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;WriteOneRecord P</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;&#39; Create and write the second record.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;P.LName = &quot;Thompson&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;P.FName = &quot;Richard&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;P.Age = 4</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;WriteOneRecord P</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;&#39; Close the file.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Close #1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; End Sub</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Чтение файлов, открытых для двоичного доступа<br>
Оператор Get считывает число байтов равно байтов, необходимых для переменной, которая будет использоваться. При использовании Get со строкой переменной длины, число байтов, считанных из файла равно текущую длину строки. Временно установить длину строки переменной длины, можно использовать функцию &#036; STRING для задания переменной равно числу пустые символы или пробелы.<br>
<br>
В следующем примере считывается файл как тот, созданные с помощью макроса WriteBinary:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp;Type Person</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;LName as String</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FName as String</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Age as Integer</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; End Type</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; Sub ReadOneRecord(PRecord as Person)</div><div class="code_line">&nbsp;&nbsp; Dim StrSize As Integer</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;&#39; Determine the size of the LName field and read it.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Get #1, , StrSize</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;PRecord.LName = String(StrSize,&quot; &quot;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Get #1, , PRecord.LName</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;&#39; Determine the size of the FName field and read it.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Get #1, , StrSize</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;PRecord.FName = String(StrSize,&quot; &quot;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Get #1, , PRecord.FName</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;&#39; Read the Age field.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Get #1, , PRecord.Age</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; End Sub</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; Sub ReadBinary()</div><div class="code_line">&nbsp;&nbsp; Dim P as Person</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;&#39; Open the file for Binary access.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Open &quot;BINARY.TXT&quot; For Binary As #1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;&#39; Read each record in the file and display it in the Debug</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;&#39; window.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Do Until EOF(1)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; ReadOneRecord P</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; Debug.Print P.LName, P.FName, P.Age</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Loop</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;&#39; Close the file.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Close #1</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; End Sub</div></ol></div></div></div></div><br>
<br>
Ключевое сдесь:<br>
Хороший способ хранение целое число с каждой строкой, чтобы указать длину строки.<br>
Можно использовать ещё одну запись в начале файла и хранить в ней всю инфу типа Count, Length, LengthStart, LengthStart + Length<br>
и вывод байтов с позиции (LengthStart TO LengthStart + Length)<br>
Наверняка такой велосипед уже есть <br>
<br>
Есть ещё одно простое и оригинальное решение, использовать встроеный в vb Class PropertyBag<br>
http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=52388&lngWId=1]]></description>
        <author>UFOpera</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3059179</guid>
        <pubDate>Thu, 12 Jan 2012 22:09:02 +0000</pubDate>
        <title>Ввод и вывод информации. Файлы</title>
        <link>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3059179</link>
        <description><![CDATA[UFOpera: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=328478&view=findpost&p=3058646'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>B.V. &#064; <time class="tag-quote__quoted-time" datetime="2012-01-12T08:16:47+00:00">12.01.12, 08:16</time></span><div class='quote '>Вычисляй смещение в файле по размеру структуры</div></div><br>
Я не использую <strong class='tag-b'>Доступ типа Random</strong> пример ниже<br>
вариант с Len(z()) не сработает<br>
хотя надо поэксперементировать с <strong class='tag-b'>Random</strong> <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Доступ типа Random Access несколько утратил свое значение после появления в версии Visual Basic 3.0 средств доступа к базам данным</div></ol></div></div></div></div><br>
а что за средств доступа к базам данным?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=328478&view=findpost&p=3058646'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>B.V. &#064; <time class="tag-quote__quoted-time" datetime="2012-01-12T08:16:47+00:00">12.01.12, 08:16</time></span><div class='quote '>Сергей85</div></div><br>
вот пример<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Option Explicit</div><div class="code_line">&nbsp;</div><div class="code_line">Private Type RCol</div><div class="code_line">&nbsp;&nbsp; &nbsp;NumbsL As Long</div><div class="code_line">&nbsp;&nbsp; &nbsp;NumbsI As Integer</div><div class="code_line">End Type</div><div class="code_line">&nbsp;</div><div class="code_line">Private Type HDATA</div><div class="code_line">&nbsp;&nbsp; &nbsp;SubName(12) As String</div><div class="code_line">&nbsp;&nbsp; &nbsp;Age As RCol</div><div class="code_line">End Type: Dim Data(1 To 6) As HDATA</div><div class="code_line">&nbsp;</div><div class="code_line">Private Sub Command1_Click()</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;Open App.Path &amp; &quot;\test.dat&quot; For Binary Access Read As #1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Get #1, 1, Data</div><div class="code_line">&nbsp;&nbsp; &nbsp;Close #1</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Dim i%</div><div class="code_line">&nbsp;&nbsp; &nbsp;For i = 1 To 3</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Text1(0).Text = Data(i).SubName(1)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Text1(3).Text = Data(i).SubName(4)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Text1(1).Text = Data(i).SubName(3)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Text1(2).Text = Data(i).Age.NumbsI</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;MsgBox i</div><div class="code_line">&nbsp;&nbsp; &nbsp;Next i</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">End Sub</div><div class="code_line">&nbsp;</div><div class="code_line">Private Sub Command2_Click() &#39;Писать в &quot;test.dat&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Data(1).Age.NumbsL = 19</div><div class="code_line">&nbsp;&nbsp; &nbsp;Data(1).SubName(1) = &quot;88888888 o работы с файлами&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Data(1).SubName(4) = &quot;Писать 11111111 test.dat&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Data(2).SubName(4) = &quot;Пис2222222222.dat&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Data(2).Age.NumbsI = 15</div><div class="code_line">&nbsp;&nbsp; &nbsp;Data(2).SubName(1) = &quot;Сначала [[[[[[[[[[[[ некоторую память&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Data(2).SubName(3) = &quot;Писать 99999999 test.dat&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Data(3).Age.NumbsI = 17</div><div class="code_line">&nbsp;&nbsp; &nbsp;Data(3).SubName(1) = &quot;Этот пример показывает как, чтобы&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Data(3).SubName(4) = &quot;Писат33333333t.dat&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Open App.Path &amp; &quot;\test.dat&quot; For Binary Access Write As #1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Put #1, 1, Data</div><div class="code_line">&nbsp;&nbsp; &nbsp;Close #1</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">End Sub</div></ol></div></div></div></div><br>
<br>
  <span class="b-attach" data-size="175004" data-hits="428" data-attach-id="15158" data-attach-post-id="3059179">
			<span class="b-attach__title">и мои эксперименты с вставкой изображений в файл</span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=3059179&amp;attach_id=15158' title='Скачать файл' target='_blank'>dat_pic_Jpg_2012_2.rar</a> (, : 428)
		</span>]]></description>
        <author>UFOpera</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3058646</guid>
        <pubDate>Thu, 12 Jan 2012 08:16:47 +0000</pubDate>
        <title>Ввод и вывод информации. Файлы</title>
        <link>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3058646</link>
        <description><![CDATA[B.V.: Вычисляй смещение в файле по размеру структуры * индекс массива и читай Get-ом размер одного элемента]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3058482</guid>
        <pubDate>Wed, 11 Jan 2012 23:34:33 +0000</pubDate>
        <title>Ввод и вывод информации. Файлы</title>
        <link>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3058482</link>
        <description><![CDATA[UFOpera: А как прочитать только одну динамическую переменную структуры из файла, не открывая весь файл?<br><br>Уточню:<br>Получить указатель на массив в структуре и измерить (с измерить проблема)<br>и прочитать из файла имено этот массив , не открывая весь файл?<br><br>я сохраняю структуру z() в файл:<br>Private Type abcd<br>    a As String<br>    b() As Byte<br>    c As Boolean<br>End Type<br><br>Dim z() As abcd<br><br>Мне надо вытащить к примеру только z(3)<br>желательно не открывая весь файл]]></description>
        <author>UFOpera</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3056881</guid>
        <pubDate>Mon, 09 Jan 2012 00:24:24 +0000</pubDate>
        <title>Ввод и вывод информации. Файлы</title>
        <link>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3056881</link>
        <description><![CDATA[DIS: Фрагмент (или весь бинарный файл) нужно читать в массив, а его можно задать и фиксированной длины, и динамический. Также можно считывать поэлементно в переменные или сразу в структуры.]]></description>
        <author>DIS</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3056591</guid>
        <pubDate>Sat, 07 Jan 2012 16:39:15 +0000</pubDate>
        <title>Ввод и вывод информации. Файлы</title>
        <link>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3056591</link>
        <description><![CDATA[Akina: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=328478&view=findpost&p=3056580'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Сергей85 &#064; <time class="tag-quote__quoted-time" datetime="2012-01-07T16:06:11+00:00">07.01.12, 16:06</time></span><div class='quote '> как можно изменить этот множитель?</div></div><br>
В рантайме никак.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=328478&view=findpost&p=3056580'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Сергей85 &#064; <time class="tag-quote__quoted-time" datetime="2012-01-07T16:06:11+00:00">07.01.12, 16:06</time></span><div class='quote '>я считаю, что бинарный файл представляет собой одну громадную строчку. Я прав?</div></div><br>
Нет.<br>
Бинарный файл представляет собой поток байтов. И грузить его нужно в массив байтов, а не в строковую переменную. Открыть файл, получить размер, (пере)определить размер массива, загрузить содержимое файла в массив. Далее, если нужно, копировать нужные блоки в (строковые) переменные или использовать напрямую. И лишь в самом крайнем случае использовать загрузку в строковую переменную, инициализируя её необходимым количеством нулей или пробелов.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=328478&view=findpost&p=3056580'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Сергей85 &#064; <time class="tag-quote__quoted-time" datetime="2012-01-07T16:06:11+00:00">07.01.12, 16:06</time></span><div class='quote '>если вы будете использовать функцию Line Input для получения строки из бинарного файла </div></div><br>
... то в подавляющем большинстве случаев Вас назовут... ммм... в лучшем случае назовут не очень грамотным программистом.]]></description>
        <author>Akina</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3056588</guid>
        <pubDate>Sat, 07 Jan 2012 16:31:54 +0000</pubDate>
        <title>Ввод и вывод информации. Файлы</title>
        <link>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3056588</link>
        <description><![CDATA[VSHome: 1)<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=328478&view=findpost&p=3056580'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Сергей85 &#064; <time class="tag-quote__quoted-time" datetime="2012-01-07T16:06:11+00:00">07.01.12, 16:06</time></span><div class='quote '>Фнукция Get позволяет сохранить несколько байт бинарного файла</div></div><br>
Не сохранить, а прочесть. Длину файла можно узнать через LOF() если файл открыт, передав ему номер канала или используя функцию FileLen(). Выделить буфер можно через функцию Space(). Параметры функций расписаны в справочниках.<br>
<br>
2)<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=328478&view=findpost&p=3056580'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Сергей85 &#064; <time class="tag-quote__quoted-time" datetime="2012-01-07T16:06:11+00:00">07.01.12, 16:06</time></span><div class='quote '>бинарный файл представляет собой одну громадную строчку. Я прав?</div></div><br>
Прав]]></description>
        <author>VSHome</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3056580</guid>
        <pubDate>Sat, 07 Jan 2012 16:06:11 +0000</pubDate>
        <title>Ввод и вывод информации. Файлы</title>
        <link>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=3056580</link>
        <description><![CDATA[Сергей85: Есть вопрос, я как раз с этим бьюсь уже 2 дня.<br><br>Фнукция Get позволяет сохранить несколько байт бинарного файла только если я напишу переменную с множителем на конце:<br>Dim FirstName As String * 20<br><br>А как можно изменить этот множитель? У меня он должен быть равен размеру файла.<br><br><br>Вопрос 2. Множитель у меня должен быть равен размеру файла, т.к. я считаю, что бинарный файл представляет собой одну громадную строчку. Я прав?<br><br><br>И важно сказать здесь, что если вы будете использовать функцию Line Input для получения строки из бинарного файла - у вас не возникнет явных ошибок, но содержимое будет браться с ошибкой&#33;&#33;&#33;]]></description>
        <author>Сергей85</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=2858768</guid>
        <pubDate>Mon, 21 Mar 2011 16:01:28 +0000</pubDate>
        <title>Ввод и вывод информации. Файлы</title>
        <link>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=2858768</link>
        <description><![CDATA[B.V.: Это, типа, реквест на фак? А почему не уведомил как-то? <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2011-03-21T16:02:33+00:00">21.03.11, 16:02</time></span></span><br>
Участникам, читающим раздел: комментировать можно здесь. Если тема пойдет в ФАК, там будет её дубль]]></description>
        <author>B.V.</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=2857905</guid>
        <pubDate>Sun, 20 Mar 2011 15:59:54 +0000</pubDate>
        <title>Ввод и вывод информации. Файлы</title>
        <link>https://forum.sources.ru/index.php?showtopic=328478&amp;view=findpost&amp;p=2857905</link>
        <description><![CDATA[Diamock: Здравствуйте <strong class='tag-b'>Уважаемые&#33;</strong><br>
Очень много вопросов, по стандарным методам и свойствам VB, таким, как файловый ввод и вывод. Надоело :( .<br>
<br>
<strong class='tag-b'><span class='tag-size' data-value='14' style='font-size:14pt;'>Файлы</span></strong><br>
<br>
Итак, вы познакомились с некоторыми средствами ввода информации. Однако эту информацию зачастую требуется не только анализировать, но и сохранять. Для сохранения информации предназначены операторы обработки файлов, позволяющие считывать и сохранять данные на различных носителях (гибкий либо жесткий диск и т.п.). Процесс открытия и сохранения файлов состоит из нескольких этапов:<br>
<br>
* получение дескриптора файла (Handle);<br>
* открытие файла;<br>
* чтение или запись данных;<br>
* закрытие файла.<br>
<br>
<span class='tag-size' data-value='14' style='font-size:14pt;'><strong class='tag-b'>Дескриптор файла</strong></span><br>
<br>
Чтобы работать с файлами, нужно понимать, как связывается система или приложение с файлом. Для этого имеется канал ввода/вывода. При открытии файлу ставится в соответствие канал с определенным номером. Таким образом, каждый открытый файл имеет собственный канал, с помощью которого записываются или считываются данные. Следовательно, для ввода и вывода данных в файл имеет значение не имя файла, а номер канала. Кроме того, операционная система должна иметь сведения о наличии свободных каналов, которые можно использовать для открытия файла.<br>
<br>
<strong class='tag-b'>FreeFile</strong><br>
<br>
Функция Visual Basic <strong class='tag-b'>FreeFile</strong> возвращает номер свободного канала, который можно использовать для работы с файлом.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">FreeFile[(RangeNumber)]</div></ol></div></div></div></div><br>
Если свободных каналов нет (открыто максимально допустимое количество файлов), возникает ошибка выполнения.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">intFH=FreeFile</div></ol></div></div></div></div><br>
В этом примере переменной intFH присваивается целое значение, которое можно использовать для открытия файла. Необязательный параметр <strong class='tag-b'>RangeNumber</strong> позволяет определить диапазон значений, из которого выбирается очередной свободный номер канала. Если его значение равно 0 (по умолчанию), то возвращается номер канала из диапазона 1 – 255, если 1, то из диапазона 256 – 511.<br>
<br>
<span class='tag-size' data-value='14' style='font-size:14pt;'><strong class='tag-b'>Типы доступа</strong></span><br>
<br>
В Visual Basic реализованы три типа доступа к файлам:<br>
<br>
* последовательный (Sequential) – для чтения и записи текстовых файлов;<br>
* произвольный (Random) – для чтения и записи текста или структурированных двоичных файлов с записями фиксированной длины;<br>
* двоичный (Binary) – для чтения и записи произвольно структурированных файлов.<br>
<br>
При создании коммуникационных каналов система должна знать, какой тип доступа к каждому конкретному файлу нужно использовать и какова структура данных этого файла.<br>
<br>
<strong class='tag-b'>Последовательный доступ</strong><br>
<br>
Последовательный доступ используется главным образом при работе с текстовыми файлами. Любая информация считывается или сохраняется в текстовом виде построчно. В тексте могут находиться символ перевода строки (<strong class='tag-b'>vbCrLf</strong> или <strong class='tag-b'>Chr (13)</strong> &amp; <strong class='tag-b'>Chr (10)</strong>) или табулятор (<strong class='tag-b'>Tab</strong> или <strong class='tag-b'>Chr (9)</strong>). Эти символы используются для форматирования текста.<br>
<br>
Способ открытия файла с последовательным доступом (для чтения, записи или добавления) задается при вызове оператора <strong class='tag-b'>Open</strong>:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Open FileName For [Input | Output | Append] As FileHandle</div></ol></div></div></div></div><br>
<strong class='tag-b'>Таблица 1.</strong> Различные операционные возможности для последовательного доступа.<br>
<br>
<table class='post_table tag-table'><tr><th>Ключевое слово</th><th>Описание</th></tr><tr><td><strong class='tag-b'>Input</strong></td><td>Открытие только для чтения из файла</td></tr><tr><td><strong class='tag-b'>Output</strong></td><td>Открытие для записи в файл</td></tr><tr><td><strong class='tag-b'>Append</strong></td><td>Открытие для добавления к файлу</td></tr></table><br>
<br>
Если файл не существует и открывается для чтения (<strong class='tag-b'>For input</strong>), то Visual Basic выдает сообщение об ошибке, а если для записи или добавления (<strong class='tag-b'>Output</strong> или <strong class='tag-b'>Append</strong>), то создается новый файл. Если файл с указанным именем существует, то в режиме <strong class='tag-b'>Output</strong> его содержимое удаляется, а в режиме <strong class='tag-b'>Append</strong> файл открывается для добавления:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Open &quot;C:\README.TXT&quot; For Input As intFH1</div><div class="code_line">Open &quot;C:\DATA\TEXT.TXT&quot; For Output As intFH2</div><div class="code_line">Open &quot;C:\USERS.TXT&quot; For Append As intFH3</div></ol></div></div></div></div><br>
<br>
В конце строки указывается номер канала, возвращаемый функцией <strong class='tag-b'>FreeFile</strong>. В некоторых операционных системах, например в Windows 95/98, можно использовать длинные имена файлов.<br>
<br>
<strong class='tag-b'>Чтение из файла</strong><br>
<br>
Для считывания данных из файла, открытого для последовательного доступа, существует несколько возможностей. В общем случае это осуществляется с помощью оператора <strong class='tag-b'>Input</strong>, имеющего несколько разновидностей:<br>
<br>
* <strong class='tag-b'>Line lnput#</strong> считывает одну строку;<br>
* <strong class='tag-b'>Input#</strong> считывает последовательность символов, обычно записанных с помощью оператора Write#;<br>
* <strong class='tag-b'>Input&#036;</strong> считывает определенное количество символов.<br>
<br>
Существует несколько вариантов чтения всей информации из файла. Перед чтением нужно открыть файл с помощью оператора <strong class='tag-b'>Open… For</strong>:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">intFH = FreeFile</div><div class="code_line">&nbsp;&nbsp;Open &quot;С:\Text.Txt&quot; For Input As #intFH </div><div class="code_line">&#39;Первый вариант</div><div class="code_line">&nbsp;&nbsp;Do Until EOF(intFH) </div><div class="code_line">&nbsp;&nbsp; &nbsp;Line Input #intFH, strString </div><div class="code_line">&nbsp;&nbsp; &nbsp;strText = strText &amp; strString &amp; vbLf</div><div class="code_line">&nbsp;&nbsp;Loop</div><div class="code_line">&nbsp;</div><div class="code_line">&#39;Второй вариант</div><div class="code_line">&nbsp;StrText = Input$(LOF(intFH), intFH)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;Close #intFH</div></ol></div></div></div></div><br>
<br>
Оба варианта приводят к одинаковому результату.<br>
<br>
В первом варианте оператор <strong class='tag-b'>Input</strong> выполняется в цикле, пока не будет, достигнут конец файла. Функция <strong class='tag-b'>EOF</strong> (<strong class='tag-b'>End Of File</strong>) возвращает значение <strong class='tag-b'>True</strong> при достижении конца файла. При этом на каждом шаге цикла считывается отдельная строка и к ней добавляется символ конца строки, который отбрасывается оператором <strong class='tag-b'>Line Input</strong>.<br>
<br>
Во втором варианте весь файл считывается функцией <strong class='tag-b'>Input&#036;</strong>. Функция <strong class='tag-b'>LOF</strong> (<strong class='tag-b'>Length Of File</strong>) позволяет определить длину файла в байтах.<br>
<br>
Заметим также, что независимо от вида оператора <strong class='tag-b'>Input</strong> указывается не <strong class='tag-b'>FileName</strong> (имя файла), а только номер канала, т.е. дескриптор файла (<strong class='tag-b'>intFH</strong>).<br>
<br>
<strong class='tag-b'>Close</strong><br>
<br>
Оператор <strong class='tag-b'>Close</strong> предназначен для закрытия открытого файла или канала.<br>
<br>
<strong class='tag-b'>Запись в файл</strong><br>
<br>
В Visual Basic для записи информации в файл используются операторы <strong class='tag-b'>Print#</strong> и <strong class='tag-b'>Write#</strong>.<br>
<br>
<strong class='tag-b'>Print#</strong><br>
<br>
Оператор <strong class='tag-b'>Print#</strong> функционирует почти так же, как его <em class='tag-i'>коллега</em> для экрана, с той лишь разницей, что данные не выводятся на экран, а сохраняются в файле, открытом для записи или добавления (<strong class='tag-b'>Open… For Output</strong> или <strong class='tag-b'>Open… For Append</strong>).<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Print #FileHandle, [(Spase(n)| Tab[(n)]] [Expression] [Charpos]</div></ol></div></div></div></div><br>
<br>
Синтаксис оператора на первый взгляд выглядит сложно:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Print #intFH, Text1.Text</div><div class="code_line">Print #intFH, &quot;Фрагмент 1&quot;, &quot;Фрагмент 2&quot;</div><div class="code_line">Print #intFH, &quot;Это составляет &quot;; &quot;единое целое&quot;</div></ol></div></div></div></div><br>
<br>
Для форматирования записываемой в файл информации следует по-разному разделять данные в операторе <strong class='tag-b'>Print</strong>. Если в операторе данные разделять запятыми <strong class='tag-b'>[,]</strong>, то в файле они будут разделены символами табуляции:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Print #intFH, &quot;Фрагмент 1&quot;, &quot;Фрагмент 2&quot;</div><div class="code_line">&#39;соответствует</div><div class="code_line">Print #intFH, &quot;Фрагмент 1&quot;; Tab; &quot;Фрагмент 2&quot;</div></ol></div></div></div></div><br>
<br>
Если же в операторе для разделения данных использовать точку с запятой [;], то данные в файл записываются без разделителей:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Print #intFH, &quot;Это составляет &quot;; &quot;единое целое&quot;</div><div class="code_line">&#39;соответствует</div><div class="code_line">Print #intFH, &quot;Это составляет единое целое&quot;</div></ol></div></div></div></div><br>
<br>
<strong class='tag-b'>Write#</strong><br>
<br>
Оператор <strong class='tag-b'>Write#</strong> имеет такой же синтаксис, что и <strong class='tag-b'>Print#</strong>. Отличие состоит только в форматировании вывода. Если <strong class='tag-b'>Print#</strong> сохраняет данные в виде обычного текста, то <strong class='tag-b'>Write#</strong> заключает текстовые строки в кавычки, а цифры выводятся без кавычек:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Print #intFH, &quot;Анна&quot;, &quot;Киев&quot;, 17</div><div class="code_line">&#39;В файле будет: Анна Киев 17</div><div class="code_line">Write #intFH, &quot;Анна&quot;, &quot;Киев&quot;, 17</div><div class="code_line">&#39;В файле будет: &quot;Анна&quot;,&quot;Киев&quot;,17</div></ol></div></div></div></div><br>
<br>
Данные, сохраненные с помощью оператора <strong class='tag-b'>Write#</strong>, можно считать оператором <strong class='tag-b'>Input#</strong>.<br>
<br>
<strong class='tag-b'>Произвольный доступ</strong><br>
<br>
Доступ типа <strong class='tag-b'>Random Access</strong> несколько утратил свое значение после появления в версии Visual Basic 3.0 средств доступа к базам данным. В отличие от последовательного доступа, при котором данные в файлах хранятся в неструктурированном виде, произвольный доступ предполагает, что файл имеет постоянную структуру. Это позволяет считывать данные в произвольном порядке.<br>
<br>
Произвольный доступ реализуется посредством оператора <strong class='tag-b'>Open</strong>.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Open FileName For Random [Access] [Lock] As [#]FileHandle [Len=RecLength]</div></ol></div></div></div></div><br>
<br>
Параметр <strong class='tag-b'>Len</strong> определяет длину записи. Если это значение меньше, чем реальная длина записи, то возникает ошибка, если больше – то при записи файла используется больше дискового пространства, чем необходимо. Параметр Access позволяет задать права доступа к открываемому файлу.<br>
<br>
<strong class='tag-b'>Таблица 2.</strong> Виды доступа при произвольном доступе.<br>
	<br>
<table class='post_table tag-table'><tr><th>Ключевое слово</th><th>Описание</th></tr><tr><td><strong class='tag-b'>Без указания</strong></td><td><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Open &quot;DATE.DAT&quot; For Random As intFH</div></ol></div></div></div></div></td></tr><tr><td><strong class='tag-b'>Чтение (Read)</strong></td><td><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Open &quot;DATE.DAT&quot; For Random Access Read As intFH</div></ol></div></div></div></div></td></tr><tr><td><strong class='tag-b'>Запись (Write)</strong></td><td><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Open &quot;DATE.DAT&quot; For Random Access Write As intFH</div></ol></div></div></div></div></td></tr><tr><td><strong class='tag-b'>Чтение и запись (Read Write)</strong></td><td><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Open &quot;DATE.DAT&quot; For Random Access Read Write As intFH</div></ol></div></div></div></div></td></tr></table><br>
<br>
Если права доступа не указаны, то по умолчанию используется <strong class='tag-b'>Read Write</strong>. Так как этот тип доступа обычно предназначен для работы с файлами, которые могут использоваться многими пользователями или приложениями, то следует обеспечить целостность данных при коллективном использовании. Для этого следует установить параметр <strong class='tag-b'>Lock</strong>, определяющий права доступа к открытому файлу. Этот параметр может принимать следующие значения:<br>
<br>
* <strong class='tag-b'>Shared</strong> Файл может использоваться всеми процессами для считывания и записи.<br>
* <strong class='tag-b'>Lock Read</strong> Никакой другой процесс не может считывать данные из файла. Данный параметр можно установить, если в данный момент никакой другой процесс не выполняет операцию чтения.<br>
* <strong class='tag-b'>Lock Write</strong> Никакой другой процесс не может записывать данные в файл. Данный параметр можно установить, если в данный момент никакой другой процесс не выполняет операцию записи.<br>
* <strong class='tag-b'>Lock Read Write</strong> Никакой другой процесс не может считывать или записывать. Данный параметр можно установить, если в данный момент не выполняются операции чтения или записи.<br>
<br>
Параметр <strong class='tag-b'>Len</strong> задает длину одной записи. Для задания длины можно использовать функцию <strong class='tag-b'>Len</strong>:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Open &quot;ADDRESS.DAT&quot; For Random Access Write As 1 Len = 27</div><div class="code_line">Open &quot;ADDRESS.DAT&quot; For Random Access Write As 1 Len = Len(Varname)</div></ol></div></div></div></div><br>
<br>
При этом важно, чтобы при открытии файла была известна длина набора данных, что может быть проблематичным, если происхождение файла неизвестно.<br>
<br>
<span class='tag-size' data-value='14' style='font-size:14pt;'><strong class='tag-b'>Ввод и вывод</strong></span><br>
<br>
<strong class='tag-b'>Get, Put</strong><br>
<br>
Для записи и чтения данных используются соответственно операторы <strong class='tag-b'>Put</strong> и <strong class='tag-b'>Get</strong>.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Put #FileHandle, RecNumber, Variable</div><div class="code_line">Get #FileHandle, RecNumber, Variable</div></ol></div></div></div></div><br>
<br>
В примере в файл записываются данные из переменной <strong class='tag-b'>Address</strong>, причем номер записи равен <strong class='tag-b'>7</strong>, а затем в переменную <strong class='tag-b'>Address</strong> считывается вторая запись файла.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Put #intFH, 7, Address &nbsp;&#39;сохраняет 7-ую запись</div><div class="code_line">Get #intFH, 2, Address &nbsp;&#39;считывает 2-ую запись</div></ol></div></div></div></div><br>
Для того чтобы в одной записи сохранить несколько значений различных типов, следует использовать пользовательские типы данных:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#39;(General)(Declaration)</div><div class="code_line">&nbsp;</div><div class="code_line">Type Person</div><div class="code_line">FirstName As String * 20 </div><div class="code_line">Name As String * 20 </div><div class="code_line">CustomerN As Integer</div><div class="code_line">End Type</div><div class="code_line">&nbsp;</div><div class="code_line">Private Customer As Person</div><div class="code_line">&#39;Процедура</div><div class="code_line">Private Sub Command1_Click()</div><div class="code_line">intFH = FreeFile</div><div class="code_line">Open &quot;C:\LORE.DAT&quot; For Random As intFH Len = Len(Customer)</div><div class="code_line">Get #intFH, 2, Customer </div><div class="code_line">Close #intFH</div><div class="code_line">End Sub</div></ol></div></div></div></div><br>
<br>
<strong class='tag-b'>Двоичный доступ</strong><br>
<br>
Двоичный доступ незначительно отличается от произвольного доступа. Разница состоит только в том, что двоичный доступ возможен не к определенному набору данных, а к отдельному байту внутри любого файла.<br>
<br>
<strong class='tag-b'>Open</strong><br>
<br>
Для открытия двоичного файла также используется оператор <strong class='tag-b'>Open</strong>.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Open FileName For Binary [Access] [Lock] As [#] FileHandle</div></ol></div></div></div></div><br>
<hr>Вот и всё что я хотел сказать&#33; :P]]></description>
        <author>Diamock</author>
        <category>Visual Basic: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	