![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Мне нужно рандомно выдать из файла текст между разделителем '#' к примеру в файле такая запись:
Цитата:
Загружаю весь файл в переменную и дальше думаю надо вести поиск по '#' в файле подсчитать их число и копировать, подскажите точней |
#2
|
||||
|
||||
![]() узнаешь число этих # = N, потом берешь random(N-1)+1, ищешь K-ю решетку (нумеруются теперь с 1) и копируешь весь текст до K+1й
jmp $ ; Happy End! The Cake Is A Lie. |
#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. |