<?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=408905&amp;view=findpost&amp;p=3747390</guid>
        <pubDate>Sun, 29 Oct 2017 10:37:40 +0000</pubDate>
        <title>Чтение файла в массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3747390</link>
        <description><![CDATA[Veniska: Да, согласен. Сам так же делал]]></description>
        <author>Veniska</author>
        <category>Pascal</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3740303</guid>
        <pubDate>Fri, 15 Sep 2017 10:10:44 +0000</pubDate>
        <title>Чтение файла в массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3740303</link>
        <description><![CDATA[Ivanhoe75: Научным методом было бы задать количество строк переменной, и всю прогу писать относительно её, чтобы можно было бы меняя одно значение попробовать разные варианты. Можно даже локально порождать тестовые строки самой программой и смлтреть не станет ли работа некомфортной]]></description>
        <author>Ivanhoe75</author>
        <category>Pascal</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3674202</guid>
        <pubDate>Mon, 20 Jun 2016 11:46:46 +0000</pubDate>
        <title>Чтение файла в массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3674202</link>
        <description><![CDATA[cezar: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Так вот вопрос - целесообразно ли это при количестве строк больше 1 500? </div></div><br>
нет, не целесообразно]]></description>
        <author>cezar</author>
        <category>Pascal</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3672440</guid>
        <pubDate>Tue, 31 May 2016 14:54:32 +0000</pubDate>
        <title>Чтение файла в массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3672440</link>
        <description><![CDATA[Vesper: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=408905&view=findpost&p=3672428'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MBo &#064; <time class="tag-quote__quoted-time" datetime="2016-05-31T14:06:08+00:00">31.05.16, 14:06</time></span><div class='quote '>Думаю, во FreePascal-е есть TStringList.</div></div><br>
<a class='tag-url' href='http://www.freepascal.org/docs-html/rtl/classes/tstringlist.html' target='_blank'>Есть.</a>]]></description>
        <author>Vesper</author>
        <category>Pascal</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3672428</guid>
        <pubDate>Tue, 31 May 2016 14:06:08 +0000</pubDate>
        <title>Чтение файла в массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3672428</link>
        <description><![CDATA[MBo: Думаю, во FreePascal-е есть TStringList. Для файлов умеренного размера (скажем, до сотни-другой мегабайт) это будет удобнее.]]></description>
        <author>MBo</author>
        <category>Pascal</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3672423</guid>
        <pubDate>Tue, 31 May 2016 13:44:14 +0000</pubDate>
        <title>Чтение файла в массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3672423</link>
        <description><![CDATA[camac: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>MBo</span><div class='quote '>почему для реализации выбран турбопаскаль?</div></div><br>
Вообще то FreePascal. Турбо в Линуксе проблематичен.]]></description>
        <author>camac</author>
        <category>Pascal</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3672406</guid>
        <pubDate>Tue, 31 May 2016 12:42:11 +0000</pubDate>
        <title>Чтение файла в массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3672406</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=408905&view=findpost&p=3672363'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>camac &#064; <time class="tag-quote__quoted-time" datetime="2016-05-31T08:41:17+00:00">31.05.16, 08:41</time></span><div class='quote '>Меня интересует - 3-4 тыс строк - это много или нет?</div></div><br>
<br>
В нынешних реалиях используемой техники - это пыль. Расчет нехитрый. Берем самый бюджетный комп с 2Gb оперативы, со слегка &quot;нафаршированной&quot; виндой. Физической памяти там займется 1-1.2Gb. Мои сугубо личные наблюдения показывают, что винда начинает подтупливать, когда занимается 80% и более физической памяти. Таким образом, примерно 400Мб мы можем &quot;откусить&quot; под закачку строк. Если взять самые длинные паскалевско-родные строки, то получим 400*1024*1024/256 = 1 638 400 строки мы можем загрузить. Соответственно, ответ на вопрос 3-4к строк - это немного.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=408905&view=findpost&p=3672363'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>camac &#064; <time class="tag-quote__quoted-time" datetime="2016-05-31T08:41:17+00:00">31.05.16, 08:41</time></span><div class='quote '>А чуть подробней об этом узнать/почитать можно? Или Вы кратко объясните?</div></div><br>
Объясню на примере. Пусть дан текст c окончанием строк в формате DOS-Windows &quot;перевод строки+возврат каретки&quot; 0D0A:<br>
<br>
<span class="tag-font" data-value="Courier" style="font-family:Courier"><span class="tag-color tag-color-named" data-value="red" style="color: red">М</span>ама мыла раму.(0d0a)<span class="tag-color tag-color-named" data-value="red" style="color: red">Р</span>ама(0d0a)<span class="tag-color tag-color-named" data-value="red" style="color: red">з</span>адолбала маму.</span><br>
<span class="tag-font" data-value="Courier" style="font-family:Courier">^....................^.........^..............</span><br>
<span class="tag-font" data-value="Courier" style="font-family:Courier">0                   17        23</span><br>
<br>
Таким образом, считывая поблочно ищем все концы строк, строя индексный массив (грубо говоря - смещения строк относительно начала). Должен получиться такой (0,17,23). Теперь им пользуемся следующим образом ...<br>
<ol class="tag-list" type="1"><li>Получение содержимого нулевой строки: в файле, открытом в бинарном режиме двигаем указатель на 0, считываем 17-0-2 символов (-2, т.к. концовки строк нам не нужны), получим подстроку длиной 15.</li><li>Получение содержимого первой строки: в файле, открытом в бинарном режиме двигаем указатель на 17, считываем 23-17-2 символов (аналогично, -2, т.к. концовки строк нам не нужны), получим подстроку длиной 4.</li><li>Получение содержимого третьей (последней) строки: в файле, открытом в бинарном режиме двигаем указатель на 23, считываем L-23 символов (в конце файла перевода строки нет, значит 2 не отнимаем), получим подстроку длиной 15, где L==38 - длина файла.</li></ol>]]></description>
        <author>JoeUser</author>
        <category>Pascal</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3672370</guid>
        <pubDate>Tue, 31 May 2016 09:34:11 +0000</pubDate>
        <title>Чтение файла в массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3672370</link>
        <description><![CDATA[MBo: А какая цель вообще стоит? И почему для реализации выбран турбопаскаль?]]></description>
        <author>MBo</author>
        <category>Pascal</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3672363</guid>
        <pubDate>Tue, 31 May 2016 08:41:17 +0000</pubDate>
        <title>Чтение файла в массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3672363</link>
        <description><![CDATA[camac: Я не совсем правильно свой оборзец написал. Или совсем неправильно...<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;program proba;</div><div class="code_line">&nbsp;&nbsp; &nbsp;uses crt;</div><div class="code_line">&nbsp;&nbsp; &nbsp;var</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;f: text;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;mas:array [1..25] of string;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;a,b,i:integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;assign (f, &#39;inf.txt&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;reset (f);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for i:=1 to 25 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;readln(f,mas[i]);</div><div class="code_line">&nbsp;&nbsp; &nbsp;repeat</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;write(&#39;ввести а: &#39;); readln(a);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;write(&#39;ввести b: &#39;); readln(b);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;for i:=a to b do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;writeln(mas[i]);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;close (f);</div><div class="code_line">&nbsp;&nbsp; &nbsp;until (a=0) or (b=0);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end.</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Меня интересует - 3-4 тыс строк - это много или нет?<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
лучше прочесть файл, но не загружать сами строки, а загружать их индексы. Грубо говоря, смещение n-ой строки от начала. Длина строки высчитывается как разница смещений n+1 (или конца файла) минус n. Но и тут следует учесть, и индексов может быть много, тогда писать их в индексный файл.<br>
</div></div><br>
А чуть подробней об этом узнать/почитать можно? Или Вы кратко объясните?]]></description>
        <author>camac</author>
        <category>Pascal</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3672309</guid>
        <pubDate>Mon, 30 May 2016 15:52:29 +0000</pubDate>
        <title>Чтение файла в массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3672309</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=408905&view=findpost&p=3672284'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>camac &#064; <time class="tag-quote__quoted-time" datetime="2016-05-30T12:39:01+00:00">30.05.16, 12:39</time></span><div class='quote '>Может и подскажете как это правильнее и красивее сделать?</div></div><br>
<br>
Чтение в память - это прямое использование ресурсов. А если файл содержит 2Tb текста? В общем случае - лучше прочесть файл, но не загружать сами строки, а загружать их индексы. Грубо говоря, смещение n-ой строки от начала. Длина строки высчитывается как разница смещений n+1 (или конца файла) минус n. Но и тут следует учесть, и индексов может быть много, тогда писать их в индексный файл. Соответственно вывод нужной строки будет осуществлен в два этапа: бинарное чтение двух индексов по смещению + бинарное чтение самой строки.<br>
<br>
... Но если в файле 15 строк, тогда не париться, а читать все в память.]]></description>
        <author>JoeUser</author>
        <category>Pascal</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3672284</guid>
        <pubDate>Mon, 30 May 2016 12:39:01 +0000</pubDate>
        <title>Чтение файла в массив</title>
        <link>https://forum.sources.ru/index.php?showtopic=408905&amp;view=findpost&amp;p=3672284</link>
        <description><![CDATA[camac: Бодрого дня, господа знатоки.<br>
Придумал себе такую проблему - чтобы выборочно файл читать не как все, а потом выводить это на экран.<br>
А &quot;загоняя&quot; его построчно в массив и затем в нужный момент выводить необходимые строки (индексы массива).<br>
<br>
Так вот вопрос - целесообразно ли это при количестве строк больше 1 500?<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">program proba;</div><div class="code_line">uses crt;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; &nbsp;f: text;</div><div class="code_line">&nbsp;&nbsp; &nbsp;mas:array [1..25] of string;</div><div class="code_line">&nbsp;&nbsp; &nbsp;a,b,i:integer;</div><div class="code_line">begin</div><div class="code_line">repeat</div><div class="code_line">&nbsp;&nbsp; &nbsp;write(&#39;ввести а: &#39;); readln(a);</div><div class="code_line">&nbsp;&nbsp; &nbsp;write(&#39;ввести b: &#39;); readln(b);</div><div class="code_line">&nbsp;&nbsp; &nbsp;assign (f, &#39;inf.txt&#39;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;reset (f);</div><div class="code_line">&nbsp;&nbsp; &nbsp;for i:=1 to 25 do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;readln(f,mas[i]);</div><div class="code_line">&nbsp;&nbsp; &nbsp;for i:=a to b do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;writeln(mas[i]);</div><div class="code_line">&nbsp;&nbsp; &nbsp;close (f);</div><div class="code_line">until (a=0) or (b=0);</div><div class="code_line">end.</div></ol></div></div></div></div><br>
Может и подскажете как это правильнее и красивее сделать?]]></description>
        <author>camac</author>
        <category>Pascal</category>
      </item>
	
      </channel>
      </rss>
	