IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Delphi. Перемешиваем строки.
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


есть текстый файл, который содержит текст, его нужно открыть, перемешать строки текста в нём в произвольном порядке и сохранить в другом файле.

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

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


--------------------
не дня без строчки кода.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


читаешь строки в массив, а потом делаешь что-то вроде этого:


// читаем строки в массив 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 всесто массива.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


Цитата(klem4 @ 6.05.2007 12:38) *

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

не подскажешь как заюзать TSrings?
приложение без TMemo.

Сообщение отредактировано: NEFFboy -


--------------------
не дня без строчки кода.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(NEFFboy @ 7.05.2007 9:25) *

не подскажешь как заюзать TSrings?
приложение без TMemo.
TStringList есть наследник TStrings, klem4 имел в виду его.
Код
var s: TStringList;
s := TStringList;
s.LoadFromFile('filename.txt');
// далее можно работать с s[]


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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;


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


спасибо за помощь...
разобрался сам, сделал, то что мне нужно

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;


--------------------
не дня без строчки кода.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Ну в принципе тоже что и я написал, только у тебя
Цитата
random(a.Count-1);


Единицу вычитать не надо, ибо random(x) возвращает случайное значение в интервале от 0 до X - 1


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


Цитата(klem4 @ 9.05.2007 11:31) *


swap_count := 50;




А почему именно 50?


--------------------
не дня без строчки кода.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Ну вот захотелось мне 50 smile.gif Это количество перестановок которые будут совершены ... Ставь любое положительное число.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 2:33
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name