Как найти слово в тексте паскаль

0 / 0 / 0

Регистрация: 21.08.2012

Сообщений: 8

1

Определить, есть ли в тексте заданное слово

21.08.2012, 20:41. Показов 9618. Ответов 19


Студворк — интернет-сервис помощи студентам

Не могу сделать без ошибок и все тут(
Выручайте…



0



296 / 274 / 194

Регистрация: 03.05.2012

Сообщений: 570

21.08.2012, 20:49

2

Цитата
Сообщение от Даша Мат.фак
Посмотреть сообщение

Не могу сделать без ошибок и все тут(
Выручайте…

Покажи свой код с ошибкой,а мы подскажем как исправить.



1



Почетный модератор

64287 / 47586 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

21.08.2012, 21:28

4

Ev[G]eN, Думаю ссылка неудачная. Слова могут разделяться не только пробелами, слова могут переноситься, да и файл читать нужно. Кроме того не нужно проверять все слова, а только найти первое.



0



CodeR

Фрилансер

3417 / 2814 / 3000

Регистрация: 08.02.2012

Сообщений: 8,546

Записей в блоге: 1

22.08.2012, 09:03

5

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Var f:text;
    s,s1,s2:string;
    b:boolean;
    i:byte;
Begin
    Assign(f,'c:in.txt');Reset(f);
    write('Введите слово: ');readln(s2);
    s1:='';b:=false;
    While not Eof(f) do
     Begin
      readln(f,s);
      writeln(s);
      s:=s+' ';
      For i:=1 to Length(s) do
       if not (s[i] in [' ','.','-',':',';','!','?']) then s1:=s1+s[i]
        else 
         Begin
          if s2=s1 then b:=true;
          s1:='';
         End;
     End;
    if b then writeln('В файле есть такое слово')
     else writeln('Нету такого словав файле');
    readln;
End.

Файл in.txt должен быть создан и заполнен в корне диска C:



1



Paster Fob

296 / 274 / 194

Регистрация: 03.05.2012

Сообщений: 570

22.08.2012, 11:40

6

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Мой вариант:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var f:text;s,st:string;
    n:integer;
begin
  assign(f,'textfile.txt');
  reset(f);
  while not eof(f) do begin
    readln(f,s);
    writeln(s);
  end;
  writeln('введите искомое слово');
  readln(st);
  reset(f);
  while not eof(f) do begin
    readln(f,s);
    n:=pos(st,s);
    if n>0 then begin
      writeln('есть такое слово в тексте');
      break;
    end;
  end;
  if n=0 then writeln('нет такого слова в тексте');
  close(f);
  readln
end.



0



Фрилансер

3417 / 2814 / 3000

Регистрация: 08.02.2012

Сообщений: 8,546

Записей в блоге: 1

22.08.2012, 11:42

7

Paster Fob, а теперь создай файл текстовый, набери туда
Runtime exe
Потом введи искомое слово в Run и прога напишет что есть такое слово хотя его нету…



0



Puporev

Почетный модератор

64287 / 47586 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

22.08.2012, 11:42

8

Pascal
1
 n:=pos(st,s);

Например сторока
сторож из столицы
ищем слово сто
Есть оно в этой строке?



0



Viktorya_rb

22.08.2012, 15:53

9

Да, в предыдущей программе оно будет считаться за слово!

Вот правильный код:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var f:text;s,st:string;
    n:integer;
begin
  assign(f,'1.txt');
  reset(f);
  while not eof(f) do begin
    readln(f,s);
    writeln(s);
  end;
  writeln('введите искомое слово');
  readln(st);
  reset(f);
  while not eof(f) do begin
    readln(f,s);
    n:=pos(st,s);
    if (n>0) and (s[n-1]=' ') and (s[n+length(st)+1]=' ') then
    begin
    writeln('есть такое слово в тексте');
    break;
    end
    else writeln('слово отсутствует');
    end;
    if n=0 then writeln('нет такого слова в тексте');
  close(f);
  readln
end.

КонецСвета

Почетный модератор

7966 / 3937 / 2464

Регистрация: 30.10.2011

Сообщений: 5,377

22.08.2012, 16:32

10

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

как вариант до кучи =)

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
uses crt;
const pr=[' ','.',',',':',';','-','!','?'];
var f: text;
    s,sl: string;
    b: boolean;
    i: byte;
begin
assign(f,'D:in.txt');
reset(f);
write('Слово: '); readln(sl);
b:=false;
while not eof(f) do
      begin
      readln(f,s); writeln(s);
      s:=' '+s+' ';
      if not b then
         begin
         for i:=1 to length(s) do
             if (copy(s,i,length(sl))=sl) and (s[i-1] in pr)
             and (s[i+length(sl)] in pr) then b:=true;
         end;
      end;
close(f);
if b then writeln('Слово есть в файле') else writeln('Слова нет в файле');
end.



1



0 / 0 / 0

Регистрация: 21.08.2012

Сообщений: 8

22.08.2012, 19:05

 [ТС]

11

Проект project1.exe вызвал класс исключения ‘RunError(2)’

В чем проблема?

ps: мне нужно создать файл, а не привязать его…

Голова пухнет уже..все переделать пыталась, ничего не выходит(



0



Почетный модератор

64287 / 47586 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

22.08.2012, 19:11

12

Цитата
Сообщение от Даша Мат.фак
Посмотреть сообщение

Проект project1.exe вызвал класс исключения ‘RunError(2)’

Если нужно в Делфи, то туда бы и писали, а здесь Паскаль.



0



CodeR

Фрилансер

3417 / 2814 / 3000

Регистрация: 08.02.2012

Сообщений: 8,546

Записей в блоге: 1

22.08.2012, 20:59

13

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата
Сообщение от Даша Мат.фак
Посмотреть сообщение

Проект project1.exe вызвал класс исключения ‘RunError(2)’
В чем проблема?
ps: мне нужно создать файл, а не привязать его…
Голова пухнет уже..все переделать пыталась, ничего не выходит(

Сразу надо говорить…

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
program Project1;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
Var f:text;
    s,s1,s2:string;
    b:boolean;
    i:byte;
Begin
    Assign(f,'c:in.txt');Rewrite(f);
    Repeat
     write('Vvedite stroku texta(okonchanie vvoda,vvod pustoi stroki): ');readln(s);
     if s<>''then writeln(f,s);
    Until s='';
    Close(f);
    write('Vvedite slovo: ');readln(s2);
    Assign(f,'c:in.txt');Reset(f);
    s1:='';b:=false;
    While not Eof(f) do
     Begin
      readln(f,s);
      writeln(s);
      s:=s+' ';
      For i:=1 to Length(s) do
       if not (s[i] in [' ','.','-',':',';','!','?']) then s1:=s1+s[i]
        else 
         Begin
          if s2=s1 then b:=true;
          s1:='';
         End;
     End;
    if b then writeln('V faile est" takoe slovo')
     else writeln('V faile net takogo slova');
    Close(f);
    readln;
end.



0



Почетный модератор

64287 / 47586 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

22.08.2012, 21:01

14



0



Фрилансер

3417 / 2814 / 3000

Регистрация: 08.02.2012

Сообщений: 8,546

Записей в блоге: 1

22.08.2012, 21:11

15

Puporev, а Lazarus идентичен Delphi?мой код там от компилируется?



0



Puporev

Почетный модератор

64287 / 47586 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

22.08.2012, 21:21

16

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Artem7, Я там не знаю есть ли консоль, а с формой точно как в Делфи.

Добавлено через 2 минуты
Да, есть консоль, сейчас проверю код.

Добавлено через 5 минут
Проверил, все работает, ничего не исправлял, только для красоты здесь

Pascal
1
writeln('Vvedite stroku texta(okonchanie vvoda,vvod pustoi stroki): ');readln(s);

а то строку нужно вводить на краю…

Добавлено через 43 секунды
Выглядит это так.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
program Project1;
 
{$mode objfpc}{$H+}
 
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, SysUtils, CustApp
  { you can add units after this };
 
type
 
  { TMyApplication }
 
  TMyApplication = class(TCustomApplication)
  protected
    procedure DoRun; override;
  public
    constructor Create(TheOwner: TComponent); override;
    destructor Destroy; override;
    procedure WriteHelp; virtual;
  end;
 
{ TMyApplication }
 
procedure TMyApplication.DoRun;
var
  ErrorMsg: String;
begin
  // quick check parameters
  ErrorMsg:=CheckOptions('h','help');
  if ErrorMsg<>'' then begin
    ShowException(Exception.Create(ErrorMsg));
    Terminate;
    Exit;
  end;
 
  // parse parameters
  if HasOption('h','help') then begin
    WriteHelp;
    Terminate;
    Exit;
  end;
 
  { add your program here }
 
  // stop program loop
  Terminate;
end;
 
constructor TMyApplication.Create(TheOwner: TComponent);
begin
  inherited Create(TheOwner);
  StopOnException:=True;
end;
 
destructor TMyApplication.Destroy;
begin
  inherited Destroy;
end;
 
procedure TMyApplication.WriteHelp;
begin
  { add your help code here }
  writeln('Usage: ',ExeName,' -h');
end;
 
var
  Application: TMyApplication;
 
{$R *.res}
Var f:text;
    s,s1,s2:string;
    b:boolean;
    i:byte;
begin
  Application:=TMyApplication.Create(nil);
  Application.Title:='My Application';
  Application.Run;
  Application.Free;
 Assign(f,'c:in.txt');Rewrite(f);
    Repeat
     writeln('Vvedite stroku texta(okonchanie vvoda,vvod pustoi stroki): ');readln(s);
     if s<>''then writeln(f,s);
    Until s='';
    Close(f);
    write('Vvedite slovo: ');readln(s2);
    Assign(f,'c:in.txt');Reset(f);
    s1:='';b:=false;
    While not Eof(f) do
     Begin
      readln(f,s);
      writeln(s);
      s:=s+' ';
      For i:=1 to Length(s) do
       if not (s[i] in [' ','.','-',':',';','!','?']) then s1:=s1+s[i]
        else
         Begin
          if s2=s1 then b:=true;
          s1:='';
         End;
     End;
    if b then writeln('V faile est" takoe slovo')
     else writeln('V faile net takogo slova');
    Close(f);
    readln;
end.



0



Фрилансер

3417 / 2814 / 3000

Регистрация: 08.02.2012

Сообщений: 8,546

Записей в блоге: 1

22.08.2012, 21:27

17

Puporev, спасибо, да на счёт строки не заметил…



0



Почетный модератор

64287 / 47586 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

22.08.2012, 21:31

18

Не смотри что кода много, все что кроме твоего создано автоматом.



0



Фрилансер

3417 / 2814 / 3000

Регистрация: 08.02.2012

Сообщений: 8,546

Записей в блоге: 1

22.08.2012, 21:32

19

Puporev,

Не по теме:

вот это да…вот тебе и Lazarus с консолью



0



Почетный модератор

64287 / 47586 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

22.08.2012, 21:36

20

Так он и с формой такой страшный, это же по сути Free Pascal с наворотами…



0



Автор Тема: Программа,позволяющая найти нужные слова в файле(pascal abc).Подобие поисковика.  (Прочитано 12081 раз)
0 Пользователей и 1 Гость смотрят эту тему.
mary

Новенький

ru
Offline Offline


Толком не соображаю в Паскале, а очень нужно разобраться и сделать программу.
Помогите пожалуйста.

var
s,s1,s2,s3,s4: string;
k1,k2: integer;
f:file of char;
c:char;
begin
assign(f,‘c:file.txt’);
reset(f);
read(f); // исходный текст
write(‘введите искомое слово 1: ‘);
readln(s2); // искомое слово
write(‘введите искомое слово 2: ‘);
readln(s3); // искомое слово
s1:=s; // временной переменной присваиваем значение исходного текста
while pos(s2,s1)<>0 do // пока такое слово есть в тексте
begin
inc(k1); // увеличиваем счетчик
delete(s1,pos(s2,s1),length(s2)); // удаляем слово из текста
end;
while pos(s3,s1)<>0 do
begin
inc(k2);
delete(s1,pos(s3,s1),length(s3));
end;
close (f);
begin
if (k1>=1) and (k2>=1) then
writeln(‘в тексте ‘,k1,‘è’,k2,‘ таких слов’)
else
writeln(‘в тексте нет таких слов’);
end;

end.


Записан
Dimka

Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской


Ничего не понял. Что делать, если программа уже представлена публике.


Записан

Программировать — значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)

mary

Новенький

ru
Offline Offline


Программа, к сожалению, лишь читает текст из файла.
а мне нужно,чтоб она осуществляла еще и поиск нужных слов ,которые могут находиться нетолько рядом, но и на расстоянии n симоволов.


Записан
Dimka

Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской


mary, и твои предложения? С какой строчки нужно начать вносить изменения?


Записан

Программировать — значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)

mary

Новенький

ru
Offline Offline


Думаю,начиная отсюда:

read(f); // исходный текст
write(‘введите искомое слово 1: ‘);
readln(s2); // искомое слово
write(‘введите искомое слово 2: ‘);
readln(s3); // искомое слово
s1:=s; // временной переменной присваиваем значение исходного текста
while pos(s2,s1)<>0 do // пока такое слово есть в тексте
begin
inc(k1); // увеличиваем счетчик
delete(s1,pos(s2,s1),length(s2)); // удаляем слово из текста
end;
while pos(s3,s1)<>0 do
begin
inc(k2);
delete(s1,pos(s3,s1),length(s3));
end;
close (f);
begin
if (k1>=1) and (k2>=1) then
writeln(‘в тексте ‘,k1,‘è’,k2,‘ таких слов’)
else
writeln(‘в тексте нет таких слов’);
end;

end.


Записан
PooH

Глобальный модератор

ru
Offline Offline
Пол: Мужской

… и можно без хлеба!


Толком не соображаю в Паскале

а если без привязки в паскале, какой алгоритм должен быть?

Добавлено через 6 минут и 46 секунд:

Программа, к сожалению, лишь читает текст из файла.

овет не правильный.

 Программа не только должна (но на самом деле в тексте ошибка) читать из файла, но и находит слова, подсчитывает их.

« Последнее редактирование: 07-11-2013 13:15 от PooH »
Записан

Удачного всем кодинга! -=x[PooH]x=-

mary

Новенький

ru
Offline Offline


Да-да,она должна находить в файле слова,которые задает сам пользователь и находить их в тексте и подсчитывать.
Подобие поиска, ctrl+F.


Записан
PooH

Глобальный модератор

ru
Offline Offline
Пол: Мужской

… и можно без хлеба!


Так и что ты от нас хочешь? В твоей программе уже все есть.


Записан

Удачного всем кодинга! -=x[PooH]x=-

Dimka

Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской


PooH, она хочет, чтобы искались слова не только подряд, но и на расстоянии n.

Однако налицо, что код чужой, и она в нём не понимает — тут медицина бессильна.


Записан

Программировать — значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)

PooH

Глобальный модератор

ru
Offline Offline
Пол: Мужской

… и можно без хлеба!


Dimka, а тут в коде и нет никакой проверки порядка, тут только не слова ищутся, а куски текста.


Записан

Удачного всем кодинга! -=x[PooH]x=-

>
Как найти слова в строке?
, Нужно найти слова и их длину

  • Подписаться на тему
  • Сообщить другу
  • Скачать/распечатать тему



Сообщ.
#1

,
03.02.04, 20:51

    Из заданного предложения распечатать все слова, длина которых больше пяти символов!


    Eiden



    Сообщ.
    #2

    ,
    03.02.04, 21:13

      Несложно, но муторно :)
      Если учесть, что исходная строка читается с клавиатуры, то

      ExpandedWrap disabled

        Program zadacha;

        Const

         Syms = [‘;’,’.’,’,’,’ ‘,’:’,’-‘];

        Var

         Source, Temp : String  ;

         I            : Byte    ;

         Done         : Boolean ;

        Begin

         Write(‘Enter string: ‘);

         ReadLn(Source);

         Done := False;

         I := 1;

         Temp := »;

         Repeat

          While (Not (Source[I] in Syms)) And (I<=Length(Source)) Do

           Begin

            Temp := Temp + Source[I];

            Inc(I);  

           End;

          If I = Length(Source) Done := True;

          If Length(Temp) > 5 Then WriteLn(Temp);

          Temp := »;

         Until Done;

        End.

      Хм, не так муторно, как думал :)
      Проверяйте, мож где ошибся.


      Vesper



      Сообщ.
      #3

      ,
      04.02.04, 05:47

        Цитата

        Eiden, 4.02.04, 01:13
        If I = Length(Source) Done := True;

        Then забыл :)

        Цитата

        Eiden, 4.02.04, 01:13
        While (Not (Source[I] in Syms)) And

        Имхо лучше проверять на [‘A’..’Z’,’a’..’z’] и без not. А вдруг там есть длинное число, скажем 100000? Тогда оно выведется.
        Вроде все.


        Eiden



        Сообщ.
        #4

        ,
        04.02.04, 09:26

          Неудивительно, я теперь только на C++ кодю :) Хорошо хоть в скобки не беру условие (хотя разницы никакой).

          Цитата

          Имхо лучше проверять на [‘A’..’Z’,’a’..’z’] и без not. А вдруг там есть длинное число, скажем 100000? Тогда оно выведется.

          Да, согласен. Но тогда уж и на ‘А’..’Я’,’а’..’п’,’р’..’я’.

          В итоге в коде исправляем две строчки:

          ExpandedWrap disabled

            Syms = [‘A’..’Z’,’a’..’z’,’А’..’Я’,’а’..’п’,’р’..’я’]

          ExpandedWrap disabled

            While (Source[I] in Syms) And (I <= Length(Source)) Do

          Ну про тот Then не забыть :)

          Сообщение отредактировано: Eiden — 04.02.04, 09:29


          Юлия



          Сообщ.
          #5

          ,
          04.02.04, 16:16

            Скажите а каким образом предложение разбито не слова??


            Eiden



            Сообщ.
            #6

            ,
            04.02.04, 18:25

              Оно разбито на слова. Слово — последовательность символом русского или латинского алфавита.


              Юлия



              Сообщ.
              #7

              ,
              04.02.04, 18:43

                Хорошо, а что тогда является разделителeм для слов!??


                Some1



                Сообщ.
                #8

                ,
                04.02.04, 19:38

                  А как обычно:
                  Мы смотрим в строке символы. Если текущий символ — буква слова, то начинаем искать все последующие буквы, пока они не кончатся, и очередная, которую мы проверим не станет «небуквой». Тогда слово кончилось. Мы выясним его длину, и если она подходит условию, то увеличим специальный счётчик, который считает такие слова. Ну а дальше опять проверяем все символы что идут далее. Если мы находим один из символов, который буква, то повторяем всё заново.

                  Добавлено в 04.02.04, 19:40:
                  Разделителем для слов является набор символов — разделителей. В нашем примере это переменная паскаля, типа set — тоесть набор символов. В ней заключён набор разделителей вроде точки. Пробела, запятой. Посмотри в тексте программы. Так вот в процессе проверки мы сравниваем каждый символ с этим набором. Если он находится в этом наборе то делаем одни действия, если нет, то другие (Читай выше).


                  Юлия



                  Сообщ.
                  #9

                  ,
                  04.02.04, 20:00

                    Temp:=» —-Непонятно что присваивается??

                    Программу почему то циклит, можете кто-то показать хоть пример как надо вводить предложение!!!
                    Может быть я не так ввожу!!!!!!?? :huh:


                    Some1



                    Сообщ.
                    #10

                    ,
                    04.02.04, 20:57

                      Ну вот. Точно работает. Только принцип немного другой — проверяем с конца строки к началу. Что вобщем-то одно и то-же:

                      ExpandedWrap disabled

                        const

                          prepen=[‘;’,’:’,’!’,’?’,’,’,’.’,’ ‘,'»‘,’-‘];

                        var

                          s:string;

                          p,o:byte;

                        begin

                          write(‘Введите предложение: ‘);

                          readln(s);

                          p:=length(s);

                          repeat

                            if s[p] in prepen then dec(p) else

                            begin

                              o:=p;

                              while (p>0) and not (s[p] in prepen) do dec(p);

                              if o-p=5 then writeln(copy(s,p+1,5));

                            end;

                          until p=0;

                        end.


                      Юлия



                      Сообщ.
                      #11

                      ,
                      06.02.04, 18:47

                        Покажите пожалуйста в данной программе пример ввода предложения!!


                        Eiden



                        Сообщ.
                        #12

                        ,
                        06.02.04, 20:23

                          Цитата

                          Temp:=» —-Непонятно что присваивается??

                          присваивается пустая строка, то есть ничего. Переменная типа String (строка) как бы обнуляется.

                          Как программу циклит?


                          Vesper



                          Сообщ.
                          #13

                          ,
                          07.02.04, 07:41

                            кстати, программу циклит из-за того, что i не увеличивается, если мы вышли из цикла по «не-символу». То есть строчку

                            Цитата

                            Eiden, 4.02.04, 01:13
                            If I = Length(Source) Done := True;

                            надо заменить на

                            ExpandedWrap disabled

                              If I = Length(Source) Then Done := True Else Inc(I);

                            ЗЫ: Опять Then пропустил. Ну это не страшно.

                            Сообщение отредактировано: vesper1 — 07.02.04, 07:41


                            Eiden



                            Сообщ.
                            #14

                            ,
                            07.02.04, 09:44

                              Цитата

                              кстати, программу циклит из-за того, что i не увеличивается, если мы вышли из цикла по «не-символу».

                              Угу, точно, спасибо! Просто привык такие вещи через цикл с постусловием делать (там i точно увеличивается), а тут что-то не подумал. :rolleyes:

                              Сообщение отредактировано: Eiden — 08.02.04, 20:24


                              Юлия



                              Сообщ.
                              #15

                              ,
                              08.02.04, 18:23

                                Всем спасибо за помощь!!!! :D

                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                                0 пользователей:

                                • Предыдущая тема
                                • Pascal
                                • Следующая тема

                                [ Script execution time: 0,0592 ]   [ 15 queries used ]   [ Generated: 27.05.23, 10:20 GMT ]  

                                Есть код для поиска строк:

                                procedure Form4.button1_Click(sender: Object; e: EventArgs);
                                var F:TextFile;// Переменной присваивается значение TextFile
                                Str:string;// Переменной присваивается значение String
                                begin
                                  Assign(F,'C:UsersНеизвестенDesktopЗаписнаяnomer.txt');
                                  reset(F);// Открывает текстовый файл для чтения
                                  while not eof(F) do// Цикл, который перебирает строки 
                                   begin
                                      readln(F, Str);// Ввод словабуквыцифры для поиска строки
                                      if pos(textbox1.text, Str)>0 //  есть ли словобуквацифра в строке
                                      then
                                      textbox2.text:= str; // Вывод строки в текстбокс
                                   end;
                                   CloseFile(F);// Закрыть файл
                                end;
                                

                                Код работает но возникла проблема. Допустим у меня есть в файле такая информация:

                                12345 Максим
                                
                                67890 Максим
                                

                                При вводе «Максим» мне выдает только посл. строку. А надо все строки в которых есть это слово. Как это организовать?

                                задан 28 мая 2014 в 7:24

                                Sin2p's user avatar

                                вместо

                                textbox2.text:= str;
                                

                                написать

                                textbox2.Text:= textbox2.Text + #13#10 + str;
                                

                                Если писать textbox2.text:= str;, то вы каждый раз будете затирать прошлую запись в текстбоксе. А когда напишете textbox2.Text:= textbox2.Text + #13#10 + str;, то к предыдущей записи будете прибавлять новую. Такая операция сложения строк называется конкатенацией.


                                Гуглите конкатенацию и прочие операции со строками.

                                ответ дан 28 мая 2014 в 8:21

                                teanЫЧ's user avatar

                                teanЫЧteanЫЧ

                                4,6852 золотых знака28 серебряных знаков46 бронзовых знаков

                                1

                                Строки в Pascal

                                Строку в Паскале можно рассматривать как массив символов переменной длины. Работа со строками в Паскале довольно проста.

                                Простой пример: объявляем строку stroka, допустимая длина этой строки равна 10-ти символам

                                Получаем: Строки в Паскале

                                Максимальная длина строки в Паскале — 255 символов. Если при объявлении переменной типа строка не указать в квадратных скобках максимально допустимую длину, то по умолчанию длина строки равна 255-ти символам.

                                Длину строки в Паскале получаем с помощью функции Length:

                                Получаем: Длина строки в Паскале

                                длина строки «sbp» равна трём байтам.

                                Если строке присвоить значение, длина которого больше допустимой, то лишние символы будут удалены. Пример:

                                Получаем: Длина строки в Паскале

                                В этом примере строка может содержать не более двух символов, отсюда и результат.

                                Присоединить одну строку к другой в Паскале можно двумя путями: знаком «+» или функцией Concat.

                                Пример для «+»:

                                Получаем: Присоединить одну строку к другой в Паскале

                                Пример соединения строк в Паскале с помощью встроенной функции Concat:

                                Получаем результат ровно такой же, как и в предыдущем примере.

                                Вставка строки в другую строку в Паскале делается с помощью стандартной функции Insert. Рассмотрим пример, где в строку «sbp-gram» после черточки, здесь номер символа 5, вставляется строка «pro»:

                                В результате получим строку «sbp-program».

                                Скопировать часть строки в Паскале можно с помощью функции Copy. Скопируем из строки «sbp-program» 3 символа, начиная с символа с номером 5, т.е. с буквы «p» в слове «program»:

                                Получаем: Скопировать часть строки в Паскале

                                Найти подстроку в строке на Паскале можно с помощью функции Pos. Для примера берём строку «program» и найдём номер символа, с которого начинается первое вхождение строки «gram» в строку «program»:

                                В переменной «number» сохранится число 4. Если бы строка «gram» не встречалось в строке «program», то функция Copy вернула бы ноль.

                                Удалить подстроку из строки в Паскале можно с помощью стандартной функции Delete. Удалим первые три символа из строки «program»:

                                Получим «gram». Строкой Delete(stroka, 1, 3) мы дали команду удалить три символа из строки «stroka», начиная с 1-ой позиции.

                                Понравилась статья? Поделить с друзьями:

                                Не пропустите также:

                              • Как найти тюрьму в майнкрафте
                              • Как найти купюру на улице
                              • Как составить акт приема передачи оргтехники
                              • Как найти площадь всех сторон комнаты
                              • Как найти свойство ноутбука

                              • 0 0 голоса
                                Рейтинг статьи
                                Подписаться
                                Уведомить о
                                guest

                                0 комментариев
                                Старые
                                Новые Популярные
                                Межтекстовые Отзывы
                                Посмотреть все комментарии