2 wolmer Hellsp@wn правильно сказал - в HTTP заголовке должно быть поле 'Connection: Close'+#13#10+#13#10; Оно должно быть вместо Keep-alive (если оно есть) Close говорит серваку что после передачи данных он должен закрыть соединение сам. Но некоторые серваки этого не понимают и ждут пока клиент сам закроет соединение. ЧТобы избежать этого парси HTTP заголовок ответа сервера и там будет поле Content-Lenght и там указано число байт которые вернул сервак. ВОт ты и считывай это кол-во. как тока считал, то сам закрывай соединение.
Если только в диспетчере задач - то юзай системные имена файлов А вообще лучше делать не неубиваемый, а невидимый процесс.
Язык: Pascal есть текстовый файл. в нем столбиком написаны цифры. цифр не больше 80. как загнать все эти цифры в массив? Пример: Берем из текстового документа: вот так из текстового файла вытаскиваю...Но как полученные данные в массив загнать???
Nizhegorodets, приблизительно так: Code: var arr: array[1..80] of integer; i: integer; ... assign(input, 'input.txt'); reset(input); i := 1; while not eof(input) do begin readln(arr[i]); i := i + 1; end; closefile(input); В Паскале давно уже не писал, может быть немного ошибся.
Code: var input: Text; a: array[1..80] of Integer; n, i: Integer; begin Assign(input, 'input.txt'); Reset(input); i := 0; while not Eof(input) do begin i := i+1; Read(input, a[i]); end; Close(input); end.
А делфи и паскаль не особо отличаються?? И с чего лучше начать? (если считать что не легче учиться, а более выгодно писать проги) И какие книгы вы бы посоветовали. Лучше в пм. Заранее спс!
особо отличаются. сходство у них в синтаксисе. начинай сразу с делфи. по книгам юзай поиск здесь и в гугле. обсуждалось 1000000 раз.
К примеру есть файл с большим кол. строк Нужно подсчитать кол. строк потоками (threards), как это сделать? С потоками как то туго у меня
тут дело не в потоках, а в скорости считывания с винта + правильности алгоритма считывания строк. Простой пример из С++ функций Code: ULONG CountLinesInFile(char* name) { FILE* file; ULONG ret = 0; char buf[64]; file = fopen(name, "rt"); if (file) { while (!feof(file)) { if (fgets(buf, 64, file)) { ret++; } } fclose(file); } return ret; } пересчитываем спамбазу на 1,7 лямов мыл примерно за 2-3 секунды. Если адаптировать для поиска #10 символов в свободно считанных данных, то можно и быстрее ускорить. Читать в потоках не советую потому что из-за синхронизации(которую придется тебе делать) ты потеряешь в скорости. По этому самый лучшый выход такой: Code: var buf:array[0..1024*64-1]; //типа 64 кила буфер len:dword; // кол-во считанных данных h:dword; cnt : dword; x :dword; begin h := CreateFile(....); if h <> $FFFFFFFF then begin cnt := 0; while true do begin if ReadFile(h,...., len) then begin for x := 0 to len-1 do if buf[x] = #10 then inc(cnt); end else break; if len < 1 then break; end; CloseHandle(h) end; end; после этого cnt будет = кол-ву строк
Есть ошибка в этой процедуре: Code: procedure TForm1.Button2Click(Sender: TObject); var FStream : TFileStream; ProgressBar :TProgressBar; i,j,count: integer; buf : array[1..40000] of Char; begin with OpenDialog1 do if Execute then begin i:=round(FStream.Size/40000); if (i*40000<FStream.Size) then i:=i+1; ProgressBar.Max:=i; Application.ProcessMessages; for j:=1 to i do begin if i=j then count:=FStream.Read(buf,FStream.Size-((i-1)*40000)) else count:=FStream.Read(buf,length(buf)); ProgressBar.Position:=j; while get_accept=false do Application.ProcessMessages; get_accept:=false; Listbox1.Items.Add(opendialog1.FileName); FStream:=TFileStream.Create(OPenDialog1.FileName,f mOpenRead); Edit2.Text:=IntToStr(Round(FStream.Size/1024))+' êèëîáàéò.'; FStream.free; end; end; end; Здесь у тебя в разделе var указан ProgressBar, который в коде должен создаваться. Метод Create. Может быть ты ошибся? ProgressBar, наверное, должен лежать у тебя на форме, а из var его нужно удалить.