Помощь - Поиск - Пользователи - Календарь
Полная версия: Delphi. Перемешиваем строки.
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
NEFFboy
есть текстый файл, который содержит текст, его нужно открыть, перемешать строки текста в нём в произвольном порядке и сохранить в другом файле.

кусок кода:
Код

begin
Edit1.Text; // сдесь исходный файл, в котором берём строки.
//тут нужен код который пермешивает строки.
Edit2.Text; // здесь сохраняем перемешанный текст.
klem4
читаешь строки в массив, а потом делаешь что-то вроде этого:


// читаем строки в массив arr
randomize;
mix_count := random(50); // количество рандомных перестановок
for i := 1 to mix_count do begin
p := random(n) + 1; // n - количество строк, прочитанных из файла в массив
q := random(n) + 1;
T := arr[ p ];
arr[ p ] := arr[ q ];
arr[ q ] := T;
end;
// пишем массив в новый файл


Добавлено через 3 мин.
ну или заюзать для работы TStrings всесто массива.
NEFFboy
Цитата(klem4 @ 6.05.2007 12:38) *

ну или заюзать для работы TStrings всесто массива.

не подскажешь как заюзать TSrings?
приложение без TMemo.
hardcase
Цитата(NEFFboy @ 7.05.2007 9:25) *

не подскажешь как заюзать TSrings?
приложение без TMemo.
TStringList есть наследник TStrings, klem4 имел в виду его.
Код
var s: TStringList;
s := TStringList;
s.LoadFromFile('filename.txt');
// далее можно работать с s[]
klem4
procedure TForm1.Button1Click(Sender: TObject);
var
s: TStringList;
swap_count, p, q: Integer;
begin
s := TStringList.Create;
s.LoadFromFile('C:\text.txt');
swap_count := 50;
while (swap_count > 0) do begin
p := random(s.Count); q := random(s.Count);
s.Exchange(p, q);
dec(swap_count);
end;
s.SaveToFile('c:\text.txt');
s.Free;
end;
NEFFboy
спасибо за помощь...
разобрался сам, сделал, то что мне нужно

var
a:TStringList;
i,first,last:integer;
s:widestring;
begin
randomize;
a:=TStringList.Create;
a.LoadFromFile(Edit1.Text);
for i:=0 to a.Count-1 do
begin
first:=random(a.Count-1);
last:=random(a.Count-1);
s:=a.Strings[first];
a.Strings[first]:=a.Strings[last];
a.Strings[last]:=s;
end;
a.SaveToFile(Edit2.Text);
a.Free;
end;
klem4
Ну в принципе тоже что и я написал, только у тебя
Цитата
random(a.Count-1);


Единицу вычитать не надо, ибо random(x) возвращает случайное значение в интервале от 0 до X - 1
NEFFboy
Цитата(klem4 @ 9.05.2007 11:31) *


swap_count := 50;




А почему именно 50?
klem4
Ну вот захотелось мне 50 smile.gif Это количество перестановок которые будут совершены ... Ставь любое положительное число.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.