Вопрос № 66201: Уважаемые эксперты, вопрос по копированию файлов потоком.
Читал как то, что можно разделить файл на потоки - скорость копирования должна возрасти, в моем понимании)) этого вопроса.
Есть программы для копирования файлов с инета, которые фьют ф...Вопрос № 66257: Уважаемые Эксперты, подскажите как работать с Excel в Borland Developer Studio 2006, при учете того что программа пишется под .NET.
Проблема в том, что для проекта .NET не существует вкладка SERVERS, и вообще, компонента TExcelApplication найти ...Вопрос № 66267: Здравствуйте уважаемые эксперты!
Как скачать файл (НЕ текстовый, например, картинку) из интернета при помощи TClientSocket.
С wininet'ом получается, но мне нужно обрабатывать и заголовок сервера.
Подскажите, пожалуйста, пару ссылок на эт...Вопрос № 66300: Доброго времени суток уважаемые эксперты!
у меня такой вопрос
DBGrid3.Columns.SaveToFile('C:lientbase.xtx');
сохраняет в файле какуюто "билеберду"
что я упустил
заранее спасибо за ответ
...Вопрос № 66305: Здравствуйте эксперты! Вот помогите пожалуйста решить задачу......
Дана строка символов, состоящая из произвольного текста,
слова разделены пробелами. Вывести на экран порядковый номер слова,
накрывающего k-ю позицию ( если на k-ю ...
Вопрос № 66.201
Уважаемые эксперты, вопрос по копированию файлов потоком.
Читал как то, что можно разделить файл на потоки - скорость копирования должна возрасти, в моем понимании)) этого вопроса.
Есть программы для копирования файлов с инета, которые фьют файл на эти самые потоки и скачивание идет быстрее.
Задача примерно такая. Есть компакт диск, флешка или любой другой носитель. Допустим на нем 600 метров jpeg файлов. Пробовал копировать разными методами. Но хотелось бы узнать как реализовано это копирование в программах для скачивания с нета
Отправлен: 09.12.2006, 07:37
Вопрос задал: василий1 (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Алтунин Василий Владимирович
Здравствуйте, василий1!
В программах скачивания с инте используется свойство протокола ФТП. Большинство ФТП серверов поддерживают докачку, это значит, что файл можно скачать не только с начала, а из любого места по смешению от начала файла. Программы закачки с инета, просто запрашивают размер файла, а потом разбивают его как бы на части. И для каждой части программа открывает новое соединение с сервером. Т.е. если качалка разбила файл на 10 частей к ФТП серверу будет установленно 10 соединений. Это примитивное описание данной технологии.
Вот несколько ссылок http://www.btc.lancom.ru/programming/base/stream_copy_files.html или вот http://www.ishodniki.ru/list/info.php?id=959 или вот http://www.yandex.ru/yandsearch?text=delphi%20копирование%20файлов%20потоком&stype=www
--------- ... Дорогу осилит Идущий ...
Отвечает: monah
Здравствуйте, василий1!
Боюсь для вашего случая этот метод не подходит. Дело в том, что обращения к диску происходят гораздо быстрее, чем скорость интернет подключения. При работе с CD или даже копировании с одного диска на другой, увеличение потоков приведет к замедлению работы. Так как время будет терятся на перемешение головок дисков. А это самая медленная операция для дисковых накопителей. В этом легко убедится скопировав с диска два файла по очереди, а затем одновременно. И сравнить время копирования.
--------- festina lente
Ответ отправил: monah (статус: Студент)
Ответ отправлен: 09.12.2006, 18:58 Оценка за ответ: 4
Отвечает: PaVeL_Ekt
Здравствуйте, василий1!
к ответу монаха хочу добавить, что такой вариант скачивания приемлем только для Flash носителей (с одной флэш на другую).
поток создать можно File->New->Other->ThreadObject
в его теле создать функцию копирования и оперировать с ним.
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 8-ой класс)
Ответ отправлен: 11.12.2006, 10:09 Оценка за ответ: 4
Вопрос № 66.257
Уважаемые Эксперты, подскажите как работать с Excel в Borland Developer Studio 2006, при учете того что программа пишется под .NET.
Проблема в том, что для проекта .NET не существует вкладка SERVERS, и вообще, компонента TExcelApplication найти фактически невозможно.
Спасибо за внимание.
Отправлен: 09.12.2006, 18:27
Вопрос задал: Turis (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: sir henry
Здравствуйте, Turis!
Можно создать ссылку на OLE-сервер Excel'я и вручную.
Uses ..., ComObj;
Var
Excel: OleVariant;
Begin
Excel:=CreateOleObject('Excel.Application'); {Создаем ссылку на сервер Excel'я}
Теперь, если Вы хорошо знаете иерархию объектов в Excel или, как минимум, можете пользоваться справкой по VBA Excel, можете пользоваться всеми объектами, которые встроены в Excel.
Спрячем Excel, чтобы не тормозил комп:
Excel.Visible:=False;
Открываем файл:
Excel.Workbooks.Add('файл-шаблон.xls');
Этот метод открытия намного удобнее стандартного метода Open(), поскольку Open() требует еще с десяток параметров.
Далее, чтобы закидывать данные в клетки таблицы создаем отдельную ссылку на эту самую таблицу:
Var
Sheet: OleVariant;
Begin
Sheet:=Excel.Workbooks(1).ActiveSheet;
Теперь можно закидывать данные:
Randomize;
For i:=1 To 10 Do
For j:=1 To 10 Do
Sheet.Cells(i, j).Value:=Random(32768);
В Cells() первый параметр это номер строки, а второй - номер колонки.
Теперь можно посмотреть, что там получилось:
Excel.Visible:=True;
Ну и после просмотра не забыть закрыть:
Excel.Close;
Тема эта очень большая, поэтому за необходимой информацией обращайтесь в справку по VBA Excel.
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 09.12.2006, 19:41 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Вопрос № 66.267
Здравствуйте уважаемые эксперты!
Как скачать файл (НЕ текстовый, например, картинку) из интернета при помощи TClientSocket.
С wininet'ом получается, но мне нужно обрабатывать и заголовок сервера.
Подскажите, пожалуйста, пару ссылок на эту тему.
Отправлен: 09.12.2006, 19:54
Вопрос задал: MegaHack (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Sarymian
Здравствуйте, MegaHack!
Вот пример отправки файла от TServerSocket на TClientSocket.
Приложение:
Ответ отправил: Sarymian (статус: 3-ий класс)
Ответ отправлен: 10.12.2006, 05:44
Вопрос № 66.300
Доброго времени суток уважаемые эксперты!
у меня такой вопрос
DBGrid3.Columns.SaveToFile('C:lientbase.xtx');
сохраняет в файле какуюто "билеберду"
что я упустил
заранее спасибо за ответ
Отправлен: 10.12.2006, 01:08
Вопрос задал: Fins (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 4)
Ответ отправил: KiberZero (статус: 4-ый класс)
Ответ отправлен: 10.12.2006, 01:15
Вопрос № 66.305
Здравствуйте эксперты! Вот помогите пожалуйста решить задачу......
Дана строка символов, состоящая из произвольного текста,
слова разделены пробелами. Вывести на экран порядковый номер слова,
накрывающего k-ю позицию ( если на k-ю позицию попадает пробел, то номер предыдущего слова), и найти в нём количество повторяющихся символов.
Отправлен: 10.12.2006, 02:21
Вопрос задал: Whitesnake (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: PaVeL_Ekt
Здравствуйте, Whitesnake!
Создайте запись
type Words=record
wrd: string;
lwrd: integer;
end;
объявим динамический массив
var
My_Words: array of Words;
в нужном Вам обработчике надо написать события:
1: разбить строку на слова;
text:=text+'|'; // символ '|' необходим далее для указания конца строки и соответственно уменьшения кода программы.
For i:=1 to length(text) do //text - входящая строка
if text[i]<>'|' then
if text[i]<>' ' then
begin
My_Words[length(My_Words)-1].wrd:=My_Words[length(My_Words)-1].wrd+text[i];
My_Words[length(My_Words)-1].lwrd:=My_Words[length(My_Words)-1].lwrd+1;
end else
SetLength(My_Words, Length(My_Words)+1);
после того, как мы разбили слова и определили их длинну (хотя длинну можно вычислять и потом)
теперь необходимо вычислить к какому слову относиться данный символ
var
lng, wrd_index: integer;
for i:=0 to length(My_Words)-1 do
begin
lng:=lng+My_Words[i].lwrd+1;
if k<=lng then wrd_index:=i;
break;
end;
нашли индекс слова к которому принадлежит символ с индексом K
дальше осталось самое легкое просчитать кол-во повторяющихся символов
создадим еще один массив на подобии My_Words
type Chars=record;
chrs: char;
clng: integer;
end;
var
My_Chars: Chars;
exist: boolean;
и будем оперировать с ним
for i:=1 to My_Words[wrd_index].lwrd do
begin
exist:=false;
For j:=0 to length(My_Chars)-1 do
if My_Words[wrd_index].wrd[i]=My_Chars[j].chrs then
begin
My_Chars[j].lchrs:=My_Chars[j].lchrs+1;
exist:=true;
end
if exist=false then
begin
setlength(length(My_Chars)+1);
My_Chars[length(My_Chars)-1].chrs:=My_Words[wrd_index].wrd[i];
end;
memo1.lines.append('В веденной строке: '+inttostr(length(My_Words))+' слов');
memo1.lines.append('Символ с порядковым номером '+inttostr(k)+' соодержиться в '+inttostr(wrd_index)+' слове');
memo1.lines.append('Количество совпадающих символов: ');
for i:=0 to length(My_Chars)-1 do
memo1.lines.append(My_Chars[i].chrs+' совпадений '+floattostr(sqrt(My_Chars[i].lchrs));
Примерно вот, так. (задача для Вас, все расставить на свои места порядок остается преждним) код программы писался без использования делфы, а потому прошу прощения за беспорядок.
Если, что задавайте вопросы.
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 8-ой класс)
Ответ отправлен: 11.12.2006, 11:00 Оценка за ответ: 5
Отвечает: KiberZero
Здравствуйте, Whitesnake!
Процедура,конечно,стандартная,но пришлось не много поломать голову.Вообще-то,мне нравится решать такие головоломки.
Так как у вас не было оговорки,какие буквы в словах вводятся,то я взял по умолчанию,что они все равны.
Другими словами говоря,алгоритм работает верно при одинаковых введённых буквах в слове!
Код получился не много запутанным,но я думаю вы разберётесь.Кое-где я дал описания.
И ещё,не забудьте добавить обработку исключений по нажатию запускающей кнопки,если в окнах
ничего ни введено!
Я ещё добавил в код процедуру упорядочивания по пробелу,чтобы между словами был только один пробел.
Одним словом смотрите приложение.
Удачи!
Приложение:
Ответ отправил: KiberZero (статус: 4-ый класс)
Ответ отправлен: 11.12.2006, 19:21 Оценка за ответ: 5