Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

26.06.2008, 16:49
|
|
Познающий
Регистрация: 31.08.2007
Сообщений: 94
Провел на форуме: 422909
Репутация:
200
|
|
Сообщение от vspv
как работать на delphi (lazarus'e) с текстовыми файлами со строками более 255 символов длиной?
неужели только посимвольно читать и бить на приемлимые строки?
вопрос решен использованием ansistring
Самое большое количество символов, которое можно использовать в Delphi. Нужно создать тип.
Код:
type
TStr = array[0..1024] of Char;
LngStr = ^TStr;
var
Buffer: LngStr;
...
New(Buffer);
ReadLn(F, Buffer^);
Сообщение от diznt
Народ как реализовать так чтобы прога не слишком много жрала памяти (ну то есть по минимуму)
Читай статьи по оптимизации кода. Можешь в типсах здесь же поискать, как то видел. Пару советов
1) Если ты часто используешь для переменных один и тот же тип, integer, к примеру, то лучше создать тип и потом ссылаться на него
type
myInt = Int64;
...
var
i:myInt;
...
2) Если переменная не становится отрицательной то не зачем ей присваивать значение integer. Присвой лучше word  Ну если это переменная счетчака, то как правило присваивают byte.
вообщем все в таком духе.. 
Последний раз редактировалось A2GIL; 26.06.2008 в 16:58..
|
|
|

26.06.2008, 18:21
|
|
Banned
Регистрация: 16.07.2007
Сообщений: 79
Провел на форуме: 801879
Репутация:
337
|
|
Сообщение от A2GIL
Самое большое количество символов, которое можно использовать в Delphi. Нужно создать тип.
Код:
type
TStr = array[0..1024] of Char;
LngStr = ^TStr;
var
Buffer: LngStr;
...
New(Buffer);
ReadLn(F, Buffer^);
Насколько я понял F у тебя типа text, то как же тогда команда ReadLn, которая считывает из файла строки, укажет строку - адресом одного символа?!?!?!
Сообщение от diznt
Народ как реализовать так чтобы прога не слишком много жрала памяти (ну то есть по минимуму)
Я писал в типсах про множества...
|
|
|

26.06.2008, 21:48
|
|
Познающий
Регистрация: 31.08.2007
Сообщений: 94
Провел на форуме: 422909
Репутация:
200
|
|
Сообщение от Dober'man
Насколько я понял F у тебя типа text, то как же тогда команда ReadLn, которая считывает из файла строки, укажет строку - адресом одного символа?!?!?!
Абсолютно не понял, что ты этим хотел сказать?! В адресную ячейку (Buffer) в которую можно записать 1024 символа и записывается считанная строка. Таким образом в текстовом файле в одной строке содержится максимально 1024 символа и строки поочередно считываются. При этом нужно конечно бы освободать память при переходе на новую строчку. Иначе говоря считывание из текстового файла, в строчках которого достаточно большое кол-во символов может происходить следюущ. образом:
Код:
var
f:TextFile;
begin
AssignFile(f,'txtfile');
Reset(f);
while not EOF(f) do
begin
new(buffer);
readln(f,buffer^);
....
dispose(buffer);
end;
CloseFile(f);
|
|
|

27.06.2008, 01:16
|
|
Banned
Регистрация: 16.07.2007
Сообщений: 79
Провел на форуме: 801879
Репутация:
337
|
|
A2GIL
Блин...ты сам разберись!!!
Код:
type
TStr = array[0..1024] of Char;
LngStr = ^TStr;
var
Buffer: LngStr;
При таком объявлении память будет выделена ТОЛЬКО ПОД УКАЗАТЕЛЬ (Buffer) (всего 1 байт).
В адресную ячейку (Buffer) в которую можно записать 1024 символа и записывается считанная строка.
Какие там 1024 символа под строку?!?!?! (и даже не 1024, а 1025)
Ты где такое видел??? =)
В твое примере ты выделил память под 1025 символов!!!!
К ним так buffer^ не обращаются!!! У тебя это и не откомпилируется...
Там циклом все делается...
for i:=0 to 1024 do
begin
read(f, buffer^[i])
end;
Это динамически формируемые массивы...
|
|
|

27.06.2008, 01:55
|
|
Banned
Регистрация: 06.01.2008
Сообщений: 904
Провел на форуме: 4037638
Репутация:
1821
|
|
Сообщение от vspv
как работать на delphi (lazarus'e) с текстовыми файлами со строками более 255 символов длиной?
неужели только посимвольно читать и бить на приемлимые строки?
вопрос решен использованием ansistring
Нельзя ли прежде, чем задать такой вопрос посмотреть здесь: google.ru, также можно массивом.... 
|
|
|

27.06.2008, 15:04
|
|
Познающий
Регистрация: 14.02.2008
Сообщений: 62
Провел на форуме: 335706
Репутация:
4
|
|
Вопрос такой! Я гружу в memo большие обьемы текста как сделать чтоб ProgressBar отоброжал процесс выполнения заливки?
Думаю вопрос вы поняли.
|
|
|

27.06.2008, 15:40
|
|
Members of Antichat - Level 5
Регистрация: 01.04.2007
Сообщений: 1,268
Провел на форуме: 10046345
Репутация:
4589
|
|
Сообщение от /Boom\
Вопрос такой! Я гружу в memo большие обьемы текста как сделать чтоб ProgressBar отоброжал процесс выполнения заливки?
Думаю вопрос вы поняли.
"Как сделать ну вот это, там еще такая штучка, ну вы поняли" ... откуда грузишь? каг грузишь? мы те экстрасенсы?
|
|
|

27.06.2008, 15:47
|
|
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
Провел на форуме: 379101
Репутация:
136
|
|
Легче статически сделать, выполнение загрузки путем увеличения с паузой.
Код:
procedure Tform1.Step;
var
i: Integer;
begin
ProgressBar1.StepIt;
Sleep(12);
ProgressBar1.StepBy(12);
ProgressBar1.Max:=100;
end;
Загрузка текстового файла
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
if OpenDialog1.Execute then
begin
if FileExists(OpenDialog1.FileName) then
begin
Step;
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
ProgressBar1.Position:=0;
end;
end;
end;
|
|
|

28.06.2008, 14:57
|
|
Новичок
Регистрация: 26.06.2008
Сообщений: 15
Провел на форуме: 27936
Репутация:
13
|
|
Сообщение от /Boom\
Вопрос такой! Я гружу в memo большие обьемы текста как сделать чтоб ProgressBar отоброжал процесс выполнения заливки?
Думаю вопрос вы поняли.
Имхо, тогда надо использовать на LoadFromFile, а буферизованное чтение из файла, скажем, блоками по 4к, макс прогрессбара установить в размер файла (в кб, скажем) и увеличивать при каждой n-ой итерации (на 4 в данном случае). И не забывать про processmessages после каждого обновления значения.
|
|
|

28.06.2008, 17:44
|
|
Новичок
Регистрация: 23.06.2007
Сообщений: 6
Провел на форуме: 56051
Репутация:
2
|
|
С помощью idHttp и CookieManager я авторизуюсь на сайте N, затем запросом http.get("N.ru/нужная страница"); загружаю исходный код запрашиваемой HTML'ки. С этим все отлично.
Вопрос: подскажите пожалуйста в каком направлении копать на пути парсинга загруженной HTML страницы, без TWebBrowser. В частности как получать данные из таблиц с id и class например
Код HTML:
<table id="mess">
<tr id="qwerty">
<td class="main">...</td>
</tr>
</table>
То бишь, надо выдернуть данные (текст) из содержащих эти классы/айди тегов.
Насколько я понял,нужный парсинг лежит в огороде DOM, а парсить путем Pos("") не особо хочется
По DOM'у, в исходниках везде идет представление WebBrowser.Document как IHTMLDocument2, но можно и без WebBrowser.Document, для этого надо что-то перегонять в IHTMLDocument2, а вот что - без понятия 
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|