![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 03.01.2009
Сообщений: 32
|
![]()
Вот мой код:
хочу в posit записать номер позиции, с которой начинается подстрока 'в ноль' в строковом массиве. Массив беру из файла.txt. begin AssignFile(f1, 'D:\МД\B- Delphi\Pok\pok.txt'); AssignFile(f2, 'D:\МД\B- Delphi\Pok\pok.txt'); try reset(f1); reset(f2); except on e: EInOutError do begin MessageDlg('Error ![]() #13 + e.Message, mtError,[mbOk],0); exit; end; end; ind:=0; while not EOF(f1) do begin ind:=ind+1; readln(f2, fff[ind]); readln(f1,stroki); memo1.lines.Add(stroki); memo2.lines.Add(fff[ind]); posit[ind]:=intToStr(AnsiPos('в ноль', memo1.lines[ind])); //label1.caption:=posit[ind]; end; closeFile(f1); closeFile(f2); end; end. массив, наверное, должен быть вида [0,0,0,4,0,6,...,] а еще лучше если будет posit[ind,j], где ind - номер строки в файле, а j - номер позиции вхождения подстроки. Но для меня это пока сложно. Если не влом, то подскажите хотябы первый вариант, сижу уже долго, а вымучать не могу.
I'll be back
|
![]() |
![]() |
![]() |
#2 |
Участник клуба Подтвердите свой е-майл
Регистрация: 19.11.2007
Сообщений: 1,022
|
![]()
Ну наверное так:
Создай на форме 3 компонента Memo1, Button1, Button2. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; f1:TextFile; f2:TextFile; s:string[255]; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); /*при создании формы записуем в файл строку*/ begin AssignFile(f1,'file01.txt'); rewrite(f1); write(f1,'При умножении числа на ноль оно привращается в ноль!'); CloseFile(f1); end; procedure TForm1.Button1Click(Sender: TObject); /*при нажатии кнопки читаем файл и записуем строку в мемо-поле*/ begin AssignFile(f1,'file01.txt'); reset(f1); while not EOF(f1) do read(f1,s); Memo1.Lines.Add(s); CloseFile(f1); end; procedure TForm1.Button2Click(Sender: TObject);/*при нажатии кнопки ищем первую позицию подстроки 'в ноль' и записуем её в файл*/ var res,i:integer; begin for i:=1 to length(s)do if(s[i]='в')and(s[i+1]=' ')and(s[i+2]='н')and(s[i+3]='о')and(s[i+4]='л')and(s[i+5]='ь') then begin res:=i; break; end; ShowMessage(IntToStr(res)); AssignFile(f2,'file02.txt'); rewrite(f2); write(f2,res); CloseFile(f2); end; end. Последний раз редактировалось profi; 07.01.2009 в 10:35. |
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
profi, без обид. Но код мало того, что нерабочий, так ещё и просто УЖАСНЫЙ! ;-((((
SarahConner, не рекомендую использовать предложенный profi код... ;-( |
![]() |
![]() |
![]() |
#4 |
Участник клуба Подтвердите свой е-майл
Регистрация: 19.11.2007
Сообщений: 1,022
|
![]()
И чем он ужасный??? И не рабочий??? Коментарии только С++ я написал и все. Но их если удалить то все работает. Проверяйте сначало все, а потом уж высказывайте свое мнение. Чем он ужасный я не мойму. Только тем что я использовал алгоритм поиска подстроки для первокурсников. Так это я сделал специально, что бы человеку голову не морочить. Конечно можно было сделать с помощью встроенной функции поиска подстрок. Знаете правило программиста, нужно написать такой алгоритм, что бы он был прост в понятии для других.
|
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
ну, я же просил: "без обид"! :-)
Цитата:
1) для того, чтобы загрузить в компонент Мемо текстовый файл достаточно вызвать метод LoadFromFile: Код:
это вообще моветон... ну да это ещё полбеды... А вот где она задаётся?! случайным образом в переменной S остаётся значение после выполнения процедуры чтения файла в процедуре Button1Click ?! А если кнопку Button1 вообще не нажали перед нажатием Button2 ?! А если в текстовом файле НЕСКОЛЬКО строчек?! 3) не знаю, чем Вам не угодила стандартная процедура поиска Pos(), но, если вы уж пишете код, так, чтобы "он был прост в понятии для других", так, по крайней мере, пишите его без ошибок! вот, в процедуре TForm1.Button2Click вы крутите цикл for i:=1 to length(s) do if(s[i]='в')and(s[i+1]=' ')and(s[i+2]='н')and(s[i+3]='о')... а что будет, если подстроки 'в ноль' в строке S СОВСЕМ НЕТ?! когда i будет равняться Length(S) то в этом случае что будет в s[i+1] и в s[i+2] и т.д. ?!... Опять же, если в строке S нет подстроки, что где задаётся значение переменной Res ?! т.е. что в этом случае запишется в файл... (да, я знаю, что там будет ноль, но об этом позаботится умный компилятор Дельфи, а не Вы...) 4) я уже не говорю, что автор вопроса спрашивала про массив, о котором в Вашем коде и речи нет.. О том, что не отрабатываются ошибки ввода/вывода (например, невозможно создать файл), файл пуст и прочая/прочая/прочая... |
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 03.01.2009
Сообщений: 32
|
![]()
Вот что я наваял, правда с помощью друга, но и задача была расширена.
Был описан массив подстрок [1..m], m=3; Получилось, пооему, не плохо. Спасибо коллегам (profi, Serge_Bliznykov) за помощь и отзывы!! ![]() procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; const m=3; podstroki: array[1..m] of string=('в размере','вышли в ноль','переговоры'); var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var f1, f2:TextFile; stroka,rezstroka:string; ind, i, j:integer; //fff:array[0..100] of string; posits:array[1..m,0..200] of integer; begin AssignFile(f1, 'D:\МД\B- Delphi\Pok\pok.txt'); reset(f1); ind:=0; while not EOF(f1) do begin readln(f1,stroka); memo1.lines.Add(stroka); rezstroka:=inttostr(ind); for j:=1 to m do begin //Получаем массив с позициями: posits[j,ind]:=Pos(podstroki[j], stroka); //форируем строку с позициями для отображения на экране rezstroka:=rezstroka+#9+inttostr(po sits[j,ind]); end; memo2.lines.add(rezstroka); {} ind:=ind+1; end; closeFile(f1); end; end.
I'll be back
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите плз очень надо, никак не могу решить 3 задачки | Pihan | Помощь студентам | 2 | 09.12.2008 15:47 |
Двумерный массив...хелп... | Sanakan | Помощь студентам | 5 | 05.12.2008 17:14 |
помогите создать процедуру! плз | Tashka | Паскаль, Turbo Pascal, PascalABC.NET | 6 | 13.10.2008 01:25 |
Не могу создать условия | Еленка | Помощь студентам | 4 | 21.05.2008 12:20 |
Cписки.Помогить плз.Никак разобраться не могу...:( | Digital | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 17.05.2008 10:48 |