![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Мне нужно рандомно выдать из файла текст между разделителем '#' к примеру в файле такая запись:
Цитата:
Загружаю весь файл в переменную и дальше думаю надо вести поиск по '#' в файле подсчитать их число и копировать, подскажите точней |
|
#2
|
||||
|
||||
|
узнаешь число этих # = N, потом берешь random(N-1)+1, ищешь K-ю решетку (нумеруются теперь с 1) и копируешь весь текст до K+1й
|
|
#3
|
||||
|
||||
|
как узнать число? и искать определенную 2 к примеру
|
|
#4
|
||||
|
||||
|
Загрузил в строку, и циклом проверяешь символы.
Код:
var
s: TStringList;
i: integer;
N: Inetger;
begin
N := 0;
s := TStringList.Create;
s.LoadFromFile(...);
{
for i:=0 to s.Count-1 do
for k:=1 to Length(s.Strings[i]) do
if(s.Strings[i][k] = '#') then
inc(N);
}
// или
for i:=1 to Length(s.Text) do
if(s.Text[i] = '#') then
inc(N);
///Как-то так: Код:
type m=record x, y: integer; var m_: array of m; countN: integer; begin setlength(m_, 1); ... // и дальше все тоже самое,только с учетом, пр нахождении знака "#" надо не только увеличивать их кол-во, но и записывать его местоположение в тексте. |
|
#5
|
||||
|
||||
|
Все как-то сложно, я обычно делаю так - загружаю файл в листбокс а потом :
Код:
procedure TForm1.Button1Click(Sender: TObject); var a:String; s:integer; begin S:=Random(ListBox1.Items.Count-1); A:=Listbox1.Items.Strings[s]; if a='#' then A:=Listbox1.Items.Strings[s+1]; Label1.Caption:=A; end; |
|
#6
|
||||
|
||||
|
Цитата:
|
|
#7
|
||||
|
||||
|
v1s2222, сделал как ты говоришь считает их, но как мне записать в mrecord позицию
Последний раз редактировалось ALexandr555, 05.01.2011 в 17:00. |
|
#8
|
||||
|
||||
|
Код:
...
for i:=0 to s.Count-1 do
for k:=1 to Length(s.Strings[i]) do begin
m_[Q].X := i;
m_[Q].Y := k; |
|
#9
|
||||
|
||||
|
Код:
for i:=0 to s.Count-1 do
for k:=1 to Length(s.Strings[i]) do
if(s.Strings[i][k] = '#') then
begin
m_[N].X := i;
m_[N].Y := k;
inc(N);
end;значт так как я понял |
|
#10
|
||||
|
||||
|
что то он ругается на это при закрытии
|
|
#11
|
||||
|
||||
|
нельзя ли лучше проще найти позицию к примеру 5 символа # сразу
|
|
#12
|
||||
|
||||
|
Можно. Хоть так:
Код:
uses StrUtils;
...
X:=0;
for i:=1 to 5 do // на 5 позицию
X := X+1+PosEx('#', S);Но я говорю, что выше описанный мной метод будет эффективнее и не будет разных ошибок... вот и все. |
|
#13
|
||||
|
||||
|
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
I,k: integer;
s: TStringList;
m_: array of m;
countN: integer;
begin
setlength(m_, 1);
N := 0;
s := TStringList.Create;
s.LoadFromFile('spam.txt');
for i:=0 to s.Count-1 do
for k:=1 to Length(s.Strings[i]) do
if(s.Strings[i][k] = '#') then
begin
inc(N);
ListBox1.Items.Add(inttostr(I));
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
ns,i: integer;
s: TStringList;
begin
memo1.clear;
s := TStringList.Create;
s.LoadFromFile('spam.txt');
Randomize;
NS:=random(N);
for i:=(strToint(ListBox1.Items.Strings[NS])+1) to (strToint(ListBox1.Items.Strings[NS+1])-1) do
memo1.Lines.Add(s.Strings[i]);
end; |
|
#14
|
||||
|
||||
|
NS:=1+random(N);
забыл написать вроде так верней будет |
|
#15
|
||||
|
||||
|
Код:
begin
setlength(m_, 1);
N := 0;
s := TStringList.Create;
s.LoadFromFile('spam.txt');
ListBox1.Items.Add(' '); for i:=0 to s.Count-1 do
for k:=1 to Length(s.Strings[i]) do
if(s.Strings[i][k] = '#') then
begin
inc(N);
ListBox1.Items.Add(inttostr(I));
end;
Последний раз редактировалось ALexandr555, 05.01.2011 в 19:45. |