На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> Как прочитать данные из файла записать в массив и вывести в Memo?
    Чтобы записать данные я использую процедуру:
    ExpandedWrap disabled
      procedure SaveToFile(file1:string;str:string);
      var
       f:TextFile;
       FileDir:String;
      begin
       FileDir:='c:\docum\'+file1;
      AssignFile(f,FileDir);
      if not FileExists(FileDir) then
       begin
        Rewrite(f);
        CloseFile(f);
       end;
      Append(f);
      Writeln(f,str);
      Flush(f);
      CloseFile(f);
      end;

    Также есть текстовый файл, там 100 записей. Они расположены в столбец.
    Цитата

    153558
    230050
    566149
    230654
    997637
    715975
    488256
    571560
    862615
    679830
    204699
    995083
    732867
    318490
    474853
    573098
    242767
    278829
    708093
    627481
    376690
    757723
    763793
    230105
    769012
    602047
    951330
    702847
    604107
    908676
    230078
    217581
    416351
    524484
    709411
    996182
    290118
    546347
    448706
    310525
    759783
    721139
    657336
    382485
    109722
    345736
    294677
    283938
    674310
    967013
    570104
    436758
    737921
    981845
    442993
    812820
    834930
    137106
    222717
    933999
    149713
    429672
    668652
    772171
    116644
    706417
    290173
    749209
    820098
    264218
    746655
    836990
    994451
    649948
    547473
    557388
    724078
    260482
    452001
    782278
    543353
    642697
    769616
    133535
    536651
    193466
    459692
    383035
    338348
    459664
    731604
    152651
    932818
    738168
    544726
    314260
    154437
    775851
    208435
    389736

    Как их прочитать записать в массив и добавить в Memo?
      Проще всего прочитать текстовый файл в Memo.Lines.LoadFromFile. Если строки нужны в виде отдельного списка - то в TStringList
        Если надо в массив, тогда можно вот так через объект TStringList
        ExpandedWrap disabled
          type
            TDynamicArrayOfIntegers = array of Integer;
           
          function LoadFromFile(const fname: String): TDynamicArrayOfIntegers;
          var
            S: TStringList;
            I: Integer;
          begin
            if FileExists(fname) then begin
              S := TStringList.Create;
              S.LoadFromFile(fname);
              SetLength(Result, S.Count);
              for i := 0 to S.Count - 1 do
                Result[i] := StrToInt(S[i]);
              FreeAndNil(S);
            end else Result := nil;
          end;
        или увеличивать длину массива на 1 и записывать новый элемент из файла в конец массива
        ExpandedWrap disabled
          type
            TDynamicArrayOfIntegers = array of Integer;
           
          function LoadFromFile(const fname: String): TDynArr;
          var
            F: TextFile;
          begin
            Result := nil;
            if FileExists(fname) then begin
              AssignFile(F, fname);
              Reset(F);
              while not EOF(F) do begin
                SetLength(Result, Length(Result) + 1);
                ReadLn(F, Result[High(Result)]);
              end;
              Close(F);
            end;
          end;
        Для количества порядка 100 эти способы не будут сильно отличаться друг от друга.
          Не получается в Memo вывести выдает ошибку.
          Цитата
          [Error] Unit1.pas(66): Incompatible types: 'String' and 'TDynamicArrayOfIntegers'

          Код:
          ExpandedWrap disabled
            unit Unit1;
             
            interface
             
            uses
              Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
              Dialogs, StdCtrls;
            type
              TDynamicArrayOfIntegers = array of Integer;
            type
              TForm1 = class(TForm)
                Memo1: TMemo;
                procedure FormShow(Sender: TObject);
              private
                { Private declarations }
              public
                { Public declarations }
              end;
             
            var
              Form1: TForm1;
             
            implementation
             
            function LoadFromFile(const fname: String): TDynamicArrayOfIntegers;
            var
              S: TStringList;
              I: Integer;
              FileDir:String;
            begin
              FileDir:='c:\docum\'+fname;
              if FileExists(FileDir) then begin
                S := TStringList.Create;
                S.LoadFromFile(FileDir);
                SetLength(Result, S.Count);
                for i := 0 to S.Count - 1 do
                  Result[i] := StrToInt(S[i]);
                FreeAndNil(S);
              end else Result := nil;
            end;
             
            procedure SaveToFile(file1:string;str:string);
            var
             f:TextFile;
             FileDir:String;
            begin
             FileDir:='c:\docum\'+file1;
            AssignFile(f,FileDir);
            if not FileExists(FileDir) then
             begin
              Rewrite(f);
              CloseFile(f);
             end;
            Append(f);
            Writeln(f,str);
            Flush(f);
            CloseFile(f);
            end;
             
            {$R *.dfm}
             
            procedure TForm1.FormShow(Sender: TObject);
            var str:TDynamicArrayOfIntegers;
            begin
             str:=LoadFromFile('Ex1.txt');
             Memo1.Lines.Add(str);
             
            end;
             
            end.
            Мой совет вам не подошёл?
              Цитата Katerina1993 @
              Не получается в Memo вывести выдает ошибку.

              Так в сообщении об ошибке ясно же сказано. В Memo надо добавлять строки, а у вас тут другой тип данных.

              Можно модифицировать программу вот так, если надо одновременно загружать данные и выводить их в Memo
              ExpandedWrap disabled
                type
                  TDynamicArrayOfIntegers = array of Integer;
                 
                function LoadFromFile(const fname: String; lines: TStrings): TDynamicArrayOfIntegers;
                var
                  I: Integer;
                  FileDir:String;
                begin
                  FileDir:='c:\docum\'+fname;
                  if FileExists(FileDir) then begin
                    lines.LoadFromFile(FileDir);
                    SetLength(Result, lines.Count);
                    for i := 0 to S.Count - 1 do
                      Result[i] := StrToIntDef(lines[i], 0);
                  end else Result := nil;
                end;
                 
                procedure TForm1.FormShow(Sender: TObject);
                var str:TDynamicArrayOfIntegers;
                begin
                 str:=LoadFromFile('Ex1.txt', Memo1.Lines);
                end;
              или выводить данные из уже загруженного массива
              ExpandedWrap disabled
                procedure TForm1.FormShow(Sender: TObject);
                var
                  str:TDynamicArrayOfIntegers;
                  i: Integer;
                begin
                  str:=LoadFromFile('Ex1.txt');
                  Memo1.Clear;
                  for i := Low(str) to High(str) do
                    Memo1.Lines.Add(IntToStr(str[i]));
                end;
                Добавлю свои 5 копеек.
                Если нужно загрузить данные как в виде текста для Memo, так и в виде динамического массива integer, то лучше всего использовать загрузку текста в вспомогательный TStringList (например, SL) методом SL.LoadFromFile, затем скопировать текст в мемо одной строкой Memo1.Lines.Text:=SL.Text, затем копировать данные в динамический массив в цикле через StrToInt, как предложено в предыдущих сообщениях.

                Примечание.
                Создание и удаление вспомогательного объекта TStringList рекомендуется заключать в блок try-finally-end.
                  leo
                  TStringList получается лишней сущностью
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0290 ]   [ 16 queries used ]   [ Generated: 26.05.24, 19:16 GMT ]