Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2009, 00:27   #1
SarahConner
Пользователь
 
Аватар для SarahConner
 
Регистрация: 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 '+ 'D:\МД\B- Delphi\Pok\pok.txt'+
#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
SarahConner вне форума Ответить с цитированием
Старый 07.01.2009, 10:32   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 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.
profi вне форума Ответить с цитированием
Старый 07.01.2009, 13:20   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

profi, без обид. Но код мало того, что нерабочий, так ещё и просто УЖАСНЫЙ! ;-((((

SarahConner, не рекомендую использовать предложенный profi код... ;-(
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.01.2009, 15:34   #4
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

И чем он ужасный??? И не рабочий??? Коментарии только С++ я написал и все. Но их если удалить то все работает. Проверяйте сначало все, а потом уж высказывайте свое мнение. Чем он ужасный я не мойму. Только тем что я использовал алгоритм поиска подстроки для первокурсников. Так это я сделал специально, что бы человеку голову не морочить. Конечно можно было сделать с помощью встроенной функции поиска подстрок. Знаете правило программиста, нужно написать такой алгоритм, что бы он был прост в понятии для других.
profi вне форума Ответить с цитированием
Старый 07.01.2009, 16:06   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, я же просил: "без обид"! :-)

Цитата:
И чем он ужасный??? И не рабочий???
ладно. тогда по быстренькому, что именно вызвало во мне ужас... и почему код, по моему мнению, не рабочий... (так, навскидку... не претендуя на полноту охвата темы и важность ошибок и недочётов...):

1) для того, чтобы загрузить в компонент Мемо текстовый файл достаточно вызвать метод LoadFromFile:
Код:
  Memo1.Lines.LoadFromFile('Имя текстового файла')
2) в процедуре TForm1.Button2Click используется глобальная переменная строкового типа S
это вообще моветон... ну да это ещё полбеды... А вот где она задаётся?! случайным образом в переменной 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) я уже не говорю, что автор вопроса спрашивала про массив, о котором в Вашем коде и речи нет..
О том, что не отрабатываются ошибки ввода/вывода (например, невозможно создать файл), файл пуст и прочая/прочая/прочая...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.01.2009, 22:07   #6
SarahConner
Пользователь
 
Аватар для SarahConner
 
Регистрация: 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
SarahConner вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите плз очень надо, никак не могу решить 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