В общем не знаю, где лучше спросить.
Length(arr)-1 или все-таки High(arr)?
Как будет эффективнее (правильнее)?
Модератор: Модераторы
kotompazb писал(а):Как будет эффективнее (правильнее)?
kotompazb писал(а):В общем не знаю, где лучше спросить.
Length(arr) или все-таки High(arr)?
Как будет эффективнее (правильнее)?
kotompazb писал(а):В общем не знаю, где лучше спросить.
Length(arr) или все-таки High(arr)?
Как будет эффективнее (правильнее)?
Mikhail писал(а):Уже рекомендовали, повторюсь, лучше начинать индексацию с нуля
kotompazb писал(а):-1
resident писал(а):Так вместо единицы использую функцию Pred.
http://lazarus-ccr.sourceforge.net/docs ... /pred.html
Получается третий вариант
Type
TListFiles = array of string;
type
TTask = class(TThread) {вершина структуры задачи}
Private
FName: String;
FListOfFiles: TListFiles;
******
end;
procedure TTask.ListOfFilesCLR;
begin
if Length(FListOfFiles)>0 then
SetLength(FlistOfFiles,0);
end;
gvido писал(а):"Проект тттт вызвал класс исключения 'External: SIGSEGV.'
zub писал(а):Нужен полный код использования класса TTask, от создания до уничтожения.
Type
TListFiles = array of string;
type
TTask = class(TThread) {вершина структуры задачи}
Private
FName: String; {Текстовая метка. Например - "Задача 1"}
FFileMask: String; {Маска поиска файлов в основной папке задачи. Например: *a*.arj}
FFoldPath: String; {Папка с которой нашинается обработка задачи}
FListOfFiles: TListFiles;
FFoldError: String; {Папка с отбракованными файлами текущей задачи}
Protected
Public
Constructor Create(aName: String; CreateSuspended: boolean = True);
procedure DoScanDir;
Procedure ListOfFilesCLR;
//*
Property Name: String Read FName Write FName;
Property FileMask: String Read FFilemask Write FFileMask;
Property Foldpath: String Read FFoldpath Write FFoldPath;
Property ListOfFiles: TlistFiles Read FListOfFiles;
end;
Function StrToTimeType(Value:String):TTimeType;
Function TimeTypeToStr(Value:TTimeType):String;
Function FullFilePath(const fDir,fFile:string): String;
implementation
Constructor TTask.Create(aName: String; CreateSuspended: boolean = True);
begin
FName:=aName;
FFoldPath:= '';
FFoldError:= '';
FFileMask:= '';
FreeOnTerminate := True;
inherited Create(CreateSuspended);
end;
procedure TTask.DoScanDir;
Var
Info : TSearchRec;
begin
If DirectoryExistsUTF8(FFoldPath) and (FFileMask<>'') then
begin
If FindFirstUTF8(FFoldPath+'\'+FFileMask,faAnyFile and not faDirectory,Info)=0 then
try
repeat
SetLength(FlistOfFiles,Length(FlistOfFiles)+1);
FListOfFiles[Pred(Length(FlistOfFiles))]:=info.Name;
until (FindNextUTF8(Info)<>0);
finally
FindCloseUTF8(Info);
end;
end;
end;
procedure TTask.ListOfFilesCLR;
begin
if Length(FListOfFiles)>0 then
Finalize(FListOfFiles,Length(FListOfFiles));
end;
unit frmMain;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, RTTIGrids, RTTICtrls, Forms, Controls, Graphics,
Dialogs, Grids, ComCtrls, Menus, ExtCtrls, StdCtrls, ValEdit, ComboEx, inicol,
inifiles,LCLType, gvsclass;
type
{ TfrmMane }
TfrmMane = class(TForm)
ListBox1: TListBox;
ToolButton2: TToolButton;
procedure FormCreate(Sender: TObject);
procedure ListBox1KeyPress(Sender: TObject; var Key: char);
private
{ private declarations }
public
{ public declarations }
end;
var
frmMane: TfrmMane;
Task: TTask;
implementation
{$R *.lfm}
{ TfrmMane }
procedure TfrmMane.FormCreate(Sender: TObject);
var
i: integer;
begin
Task:=TTask.Create('Входящие 311-П',true);
Task.FileMask:='mz*_30.821';
task.Foldpath:='U:\ЦБ\ptkpsd\post\post';
Task.DoScanDir{(task.Foldpath,Task.FileMask)};
for i:=0 to pred(length(task.ListOfFiles)) do
begin
listbox1.Items.Append(Task.ListOfFiles[i]);
end;
end;
procedure TfrmMane.ListBox1KeyPress(Sender: TObject; var Key: char);
var
i:integer;
begin
if key=Chr(vk_delete) then listbox1.Items.Clear;
if key='a' then
begin
if length(task.ListOfFiles)>0 then
begin
for i:=0 to pred(length(task.ListOfFiles)) do
listbox1.Items.Append(Task.ListOfFiles[i]);
end;
end;
if key='c' then task.ListOfFilesCLR;
end;
end.
zub писал(а):>>Массив FListOfFiles заполняется без проблем с предварительным увеличением размера массиваСкорее всего заполняется какраз с проблемами)) или в промежутке между заполнением - очищением портится
Finalize(FListOfFiles,length(FListOfFiles));
zub писал(а):gvidoЦените пожалуйста время форумчан. Давайте не обрывки, а минимальный компилируемый пример с ошибкой. Заодно, пока будешь делать пример и ошибку выловишь))В приведенных обрывках имхо проблем нет.
gvido писал(а):zub писал(а):gvidoЦените пожалуйста время форумчан. Давайте не обрывки, а минимальный компилируемый пример с ошибкой. Заодно, пока будешь делать пример и ошибку выловишь))В приведенных обрывках имхо проблем нет.
Сорьки, забыл убрать, не используемые в данном примере поля. Исправил.
Код должен собраться.
только что собрал все эту хрень в делфи 10 (сцуко!!!!) все отработало.
вот урезанный проект:
https://yadi.sk/d/Q4-6-8oCkVvnt
пути и маску файлов в основной форме нужно сменить.
Вернуться в Free Pascal Compiler
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13