Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.06.2011, 22:31
us8ihj us8ihj вне форума
Прохожий
 
Регистрация: 18.06.2011
Сообщения: 19
Репутация: 10
Вопрос Загрузка текстового файла по интернет ссылке

Добрый день! Я, как новичек, хотел обратится за помощью. Есть такая задача: Нужно в Memo (либо другой контейнер) загрузить данные по ссылке http://qwer.ru/12345678.txt (это просто пример, но ссылка имеет схожий вид). Как организовать процесс ввода? Учитывать то, что файл может не находится в кэше браузера. Просто его надо открыть и загрузить в Memo. Буду благодарен за помощь.
Ответить с цитированием
  #2  
Старый 18.06.2011, 22:51
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

добавь на форму компонент idHTTP
и потом, например, на кнопку напиши
memo1.Text:=IdHTTP1.get('http://qwer.ru/12345678.txt')
Ответить с цитированием
  #3  
Старый 18.06.2011, 22:56
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Код:
TIdHTTP;
TIdHTTP.Get('qwer.ru/12345678.txt', stream);
memo1.lines.loadfromstream(stream);
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 19.06.2011, 00:13
us8ihj us8ihj вне форума
Прохожий
 
Регистрация: 18.06.2011
Сообщения: 19
Репутация: 10
По умолчанию

При нажатии на кнопку выдает ошибку Socket Error #10061.Connection refused. И ничего не происходит. Вот нашел для теста ссылку на текстовый файл: http://www.typograf.ru/flog/test1.txt , пытлася его загрузить.
M.A.D.M.A.N., при запуске жалуется на stream как на необъявленную переменную. Какой тип ей объявить?
Ответить с цитированием
  #5  
Старый 19.06.2011, 00:18
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Эх, лодыри, справку лень почитать.
Код:
var
  Stream : TMemoryStream;

  ...
  Stream := TMemoryStream.Create;
  try
    TIdHTTP.Get('qwer.ru/12345678.txt', Stream);
    memo1.lines.loadfromstream(Stream);
  finally
    Stream.Free;
  end;
Ответить с цитированием
  #6  
Старый 19.06.2011, 00:18
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

хм у мя вот так норм все в мемо загрузилось
Memo1.Text:=IdHTTP1.Get('http://www.typograf.ru/flog/test1.txt')
может зависит от типа интернет соединеия че нить,незнаю уж.но сработало без ошибок.
Ответить с цитированием
  #7  
Старый 19.06.2011, 00:29
us8ihj us8ihj вне форума
Прохожий
 
Регистрация: 18.06.2011
Сообщения: 19
Репутация: 10
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var Stream:TMemoryStream;
begin
Stream:=TMemoryStream.Create;
try
IdHTTP1.Get('http://www.typograf.ru/flog/test1.txt',Stream);
Memo1.Lines.LoadFromStream(Stream);
finally
Stream.Free;
end;
end;

Вот таким способом ничего не происходит.

Snake22, А вашим сработало! Оказывается я забыл http:// дописать.

Вообщем-то говоря мне нужно не просто открыть файл, но и считать с него определенную информацию.
Файл такого вида:

a1 b1 c1 d1 ...
a2 b2 c2 d2 ...
...

где aN, bN, cN, dN - это строковая информация (там могут быть и слова и айпи-адреса (с точками) или просто числа, а пробелы - табуляция.

Этот файл надо открыть, и вывести в StringGrid. Если бы я работал с файлом который находится на компьютере - было бы проще. Конечно, можно открыть по ссылке, вывести в Memo и сохраннить в текстовый документ, но Memo1.Text:=... Выведет этот файл одной строкой, а мне нужно чтобы формат файла остался прежним и с ним можно было вести дальшейшую его обработку (в частности, это надо поместить в StringGrid).

Последний раз редактировалось us8ihj, 19.06.2011 в 01:03.
Ответить с цитированием
  #8  
Старый 19.06.2011, 00:56
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну нужно же хоть маленько думать, после загрузки файла указатель в Stream указывает на его конец.
Код:
procedure TForm1.Button4Click(Sender: TObject);
var
  Stream : TMemoryStream;
begin
  Stream := TMemoryStream.Create;
  try
    IdHTTP1.Get(''http://www.typograf.ru/flog/test1.txt', Stream);
    Stream.Seek(0, 0); // установим указатель потока в начало
    if Stream.Size > 0 then
      Memo1.Lines.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

Последний раз редактировалось angvelem, 19.06.2011 в 00:58.
Ответить с цитированием
  #9  
Старый 19.06.2011, 01:06
us8ihj us8ihj вне форума
Прохожий
 
Регистрация: 18.06.2011
Сообщения: 19
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Ну нужно же хоть маленько думать, после загрузки файла указатель в Stream указывает на его конец.
Код:
procedure TForm1.Button4Click(Sender: TObject);
var
  Stream : TMemoryStream;
begin
  Stream := TMemoryStream.Create;
  try
    IdHTTP1.Get(''http://www.typograf.ru/flog/test1.txt', Stream);
    Stream.Seek(0, 0); // установим указатель потока в начало
    if Stream.Size > 0 then
      Memo1.Lines.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

Дело в том, что я с потоками не работал. За курс информатики я научился только решать уравнения, системы уравнений, интегралы и таблицы (стандартный курс не информационных специальностей). Но сам предмет мне очень нравится, вот и сам разбираюсь, как могу.

О ну что я могу сказать... Твой способ вывел в Memo всё как надо, как я и писал в предыдущем посте. Осталось перевести в таблицу)

Последний раз редактировалось us8ihj, 19.06.2011 в 01:09.
Ответить с цитированием
  #10  
Старый 19.06.2011, 01:11
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от us8ihj
Дело в том, что я с потоками не работал. За курс информатики я научился только решать уравнения, системы уравнений, интегралы и таблицы (стандартный курс не информационных специальностей). Но сам предмет мне очень нравится, вот и сам разбираюсь, как могу.
Дело в том, что с Инди-компонентами, я не работал лет 10 как минимум и изучать пришлось не на уроках информатики а по справочной информации и книгам.

Последний раз редактировалось angvelem, 19.06.2011 в 01:13.
Ответить с цитированием
  #11  
Старый 19.06.2011, 01:15
us8ihj us8ihj вне форума
Прохожий
 
Регистрация: 18.06.2011
Сообщения: 19
Репутация: 10
По умолчанию

Спасибо за помощь! У меня еще могут возникнуть вопросы по обработке этого файла, надеюсь мне и в этом помогут) А пока благодарю вас) Мне просто спросить не у кого, а до этого я обращался к преподователю... Но сейчас лето.. )
Ответить с цитированием
  #12  
Старый 19.06.2011, 05:43
us8ihj us8ihj вне форума
Прохожий
 
Регистрация: 18.06.2011
Сообщения: 19
Репутация: 10
По умолчанию

Вообщем мне удалось текстовый файл (а именно ссылку на него), строки которого разбиты табуляторами, поместить в таблицу. Теперь новая задача: неоходимо Из этой таблицы вывести статистику.
Пример:
Код:
/Имя/  /Очки/     
  A       1
  B       1
  C       1
  A       1
  B       1
  A       1
В новой таблице результаты должны иметь такой вид
Код:
/Место/   /Имя/ /Всего Очков/
   1       A       3
   2       B       2
   3       C       1
Статистика ведется по имени. У кого больше очков - тот на первом месте. Если очки равные - сортировку выполнять по имени.

Я еще над алгоритмом работаю, может немного позже скину эскиз, а если удастся то и рабочий код.

Последний раз редактировалось us8ihj, 19.06.2011 в 05:49.
Ответить с цитированием
  #13  
Старый 19.06.2011, 11:19
us8ihj us8ihj вне форума
Прохожий
 
Регистрация: 18.06.2011
Сообщения: 19
Репутация: 10
По умолчанию

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

Код:
procedure TForm1.Button2Click(Sender: TObject);
var i,j,m,n,t,h,q,r,Tmp:integer; Tmps,s:string; k:array of integer; a:array of string;
begin
h:=1;
SetLength(k,StringGrid1.RowCount);
SetLength(a,StringGrid1.RowCount);
With StringGrid1 do
 begin
 for n:=1 to RowCount-1 do
  begin
  q:=0;    //не было совпадения с предыдущими строками
  for t:=1 to n-1 do
      begin
      if cells[3,n]=cells[3,t] then
      q:=1;   // было
      end;
    if n=1 then
    begin
    k[i]:=0;
    k[1]:=strtoint(cells[4,1]);
    for i:=1 to RowCount-1 do
     begin
      if Cells[3,i]=Cells[3,1] then
      begin
       k[1]:=k[1]+k[i+1];
       a[1]:=cells[3,1];
      end;
    end;
    end;
   if n>1 then
   begin
    if q=0 then
    begin
    h:=h+1;
    k[h]:=1;
    a[h]:=Cells[3,n];
     for j:=n+1 to RowCount-1 do
     if Cells[3,n]=Cells[3,j] then
      begin
      k[h]:=k[h]+1;
      end;
     end;
    end;
  end;
StringGrid2.RowCount:=h+1;
With StringGrid2 do
begin
for m:=1 to h-1 do
 for r:=m+1 to h do
  begin
  if k[m]<k[r] then
  begin
  Tmp:=k[m];
  k[m]:=k[r];
  k[r]:=Tmp;
  Tmps:=a[m];
  a[m]:=a[r];
  a[r]:=Tmps;
  end;
  end;
  for m:=1 to h do
  begin
 Cells[0,m]:=inttostr(m);
 Cells[2,m]:=inttostr(k[m]);
 Cells[1,m]:=a[m];
 end;
end;
end;
end;

Данный вариант сортирует по числу совпадения имени, Учитывая очки. Но здесь нет сортировки по имени, в случае если очки равны...
Ответить с цитированием
  #14  
Старый 19.06.2011, 21:27
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну, если это не контрольная работа, то можно использовать StringList с его методом сортировки.
Ответить с цитированием
  #15  
Старый 19.06.2011, 22:08
us8ihj us8ihj вне форума
Прохожий
 
Регистрация: 18.06.2011
Сообщения: 19
Репутация: 10
По умолчанию

Нет, я пишу программу для себя, мне ей придестя пользоваться. МОжно попродробнее о методе сортировки StringList'а ?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:16.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter