Перемешивание строк / Delphi/RAD XE4

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Alina2015, 7 Mar 2018.

  1. Alina2015

    Alina2015 New Member

    Joined:
    29 Jan 2018
    Messages:
    11
    Likes Received:
    2
    Reputations:
    0
    Ребята как переделать вот этот код - под чтение построчно. Что бы не загружать в память.
    Code:
    var
      s: TStringList;
      z, p, q: Integer;
    begin
      s := TStringList.Create;
      s.LoadFromFile('C:\text.txt');
      z := 50;
      while (z > 0) do begin
        p := random(s.Count); q := random(s.Count);
        s.Exchange(p, q);
        dec(z);
      end;
      s.SaveToFile('c:\text.txt');
      s.Free;
    end;
    Начала переделывать вот так (но вот в регуляровкой рандом не дружу):

    Code:
    var
        z, p, q: Integer;
        ft, ft2: TextFile;
        s:string;
     
    begin
      if OpenDialog1.Execute then begin
      AssignFile(ft, OpenDialog1.FileName);
      Reset(ft);
      AssignFile(ft2, ExtractFileDir(OpenDialog1.FileName)+'\rez.txt');
      Rewrite(ft2); // чтобы создался новый, если нету, или перезаписался с нуля
      Append(ft2); // чтобы можно было добавлять строки, а не перезаписывать каждый раз
     begin
    while not eof(ft) do
     begin
    readln(ft,s);
    //////////////////////////////////////
    Вот тут не знаю что дописать ?
    //////////////////////////////////////
    writeln(ft2,s)
     end;
    closefile(ft);
    closefile(ft2);
    end;
    end;
    end;
     
  2. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    634
    Likes Received:
    246
    Reputations:
    42
    Никак) Во всяком случае полного решения через AssignFile я не вижу.
     
  3. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    проще- прочитай в массив строк а потом рандомизируй его и запиши в новый файл
     
  4. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    634
    Likes Received:
    246
    Reputations:
    42
    ТС пытается снизить потребление памяти, считать пару гигов в массив не самый лучший вариант в данном случае
     
    Alina2015 likes this.
  5. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    я что то не понял он читает файл в 2гб?
    так в 32 разрядной ос ограничение и будет в 2гб для программы.
    либо разбивать файл, либо ммф попробовать можно.не понял конкретно задачи.
     
    Alina2015 likes this.
  6. Protocoler

    Protocoler Elder - Старейшина

    Joined:
    10 Oct 2012
    Messages:
    51
    Likes Received:
    54
    Reputations:
    81
    Можно поиграться с BlockRead/Write но придется играться с определением конца строки и побайтовым сдвигом..