7 / 7 / 5
Регистрация: 28.07.2014
Сообщений: 104

Поиск символа в тексте

07.09.2014, 19:26. Показов 4381. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Пишу поисковик, который по вводимым в Edit словам ищет в загружаемом в программу тексте предложения. Для её решения мне необходимо добраться до символа в строке из текста. Для этого я пытаюсь использовать массив. Хочу в произвольном тексте заменить один символ другим. (Это мне пригодится в дальнейшем для поиска в конце каждого предложения знака препинания) Замена не происходит. Где я напутал?
Delphi
1
2
3
4
5
6
7
8
9
10
for i:=0 to List.Count-1
    do begin
    a:=List[i];
    //для каждой строки текста выполняем
      for j:=1 to length(a)
      do begin
      //для каждого символа строки выполняем проверку
      if a[j] = '.' then a[j] := '4';
      end;
      end;
Вложения
Тип файла: rar Поиск предложений по словам.rar (190.2 Кб, 9 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.09.2014, 19:26
Ответы с готовыми решениями:

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

Позиция последнего символа из слова в тексте
Задача: Вставить текст после одного слова. Думаю для этого нужно использовать функцию insert, но для того нужно знать...

Поиск символа в тексте.
Здравствуйте, ФОРУМЧАНЕ)):) Помогите Пожалуйста. Как сделать так, Если в TextBox1 есть символ, например "@" То тогда,...

27
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
07.09.2014, 19:33
Delphi
1
if a[j] = '.' then List[i][j] := '4';
0
7 / 7 / 5
Регистрация: 28.07.2014
Сообщений: 104
07.09.2014, 21:18  [ТС]
нет, не получается
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
List:= tStringList.Create;
    //создали список строк
    List.LoadFromFile(openDialog1.FileName);
    //закгрузили текст в область
    for i:=0 to List.Count-1
    do begin
    a:=List[i];
    //для каждой строки текста выполняем
      for j:=1 to length(a)
      do begin
      //для каждого символа строки выполняем проверку
      if a[j] = '.' then List[i][j] := '4';
      end;
    end;
Добавлено через 1 час 32 минуты
пожалуйста, не могу продвинуться дальше...
0
Пишу на Delphi...иногда
 Аватар для cotseec
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
07.09.2014, 21:25
StringReplace
0
7 / 7 / 5
Регистрация: 28.07.2014
Сообщений: 104
07.09.2014, 21:34  [ТС]
Да я знаю, про StringReplace, но я так думаю если одно не работает, то и другое не будет, если в принципе поиска ничего не менять. List[i] это строка, как мне от строки к символам переходить!?
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
07.09.2014, 21:45
Цитата Сообщение от TampLieR Посмотреть сообщение
не получается
Тогда так:
Delphi
1
2
3
4
    for j:=1 to length(a) do
      if a[j] = '.' then
        a[j] := '4';
    List[i] := a;
1
7 / 7 / 5
Регистрация: 28.07.2014
Сообщений: 104
07.09.2014, 21:55  [ТС]
РАБОТАЕТ, огромное спасибо! Пойду дальше...

Добавлено через 2 минуты
Ещё вот такой вопрос возник. Что мешает заменять 1 символ 2-мя другими?

Добавлено через 1 минуту
Например
Delphi
1
2
3
if a[j] = '.' then
        a[j] := 'аб';
    List[i] := a;
0
Эксперт Pascal/Delphi
 Аватар для droider
4882 / 2819 / 862
Регистрация: 04.10.2012
Сообщений: 10,247
07.09.2014, 21:56
TampLieR, не забудьте освободить List после работы с ним.
0
7 / 7 / 5
Регистрация: 28.07.2014
Сообщений: 104
07.09.2014, 22:03  [ТС]
droider, Если это относится к моему последнему вопросу:
Цитата Сообщение от TampLieR Посмотреть сообщение
Что мешает заменять 1 символ 2-мя другими?
,то не влияет, так и делаю, спасибо!)
Если просто замечание, то спасибо!)
0
Эксперт Pascal/Delphi
 Аватар для droider
4882 / 2819 / 862
Регистрация: 04.10.2012
Сообщений: 10,247
07.09.2014, 22:07
Цитата Сообщение от TampLieR Посмотреть сообщение
Если просто замечание
именно так.
Цитата Сообщение от TampLieR Посмотреть сообщение
так и делаю
я этого не увидел.
0
7 / 7 / 5
Регистрация: 28.07.2014
Сообщений: 104
07.09.2014, 22:18  [ТС]
Цитата Сообщение от droider Посмотреть сообщение
я этого не увидел.
Просто никто не захотел смотреть прикреплённый файл...
Скажите пожалуйста ещё, Что мешает заменять 1 символ 2-мя другими?
0
Эксперт Pascal/Delphi
 Аватар для droider
4882 / 2819 / 862
Регистрация: 04.10.2012
Сообщений: 10,247
07.09.2014, 22:19
Цитата Сообщение от TampLieR Посмотреть сообщение
Что мешает заменять 1 символ 2-мя другими?
Несовместимость типов. Символьный и строковый. Сделайте так
Delphi
1
2
3
4
5
6
7
8
if a[j] = '.'
      then
      begin
        Delete(a, j, 1);
        Insert('aб', a, j);
      end;
    List[i] :=a;
...
1
7 / 7 / 5
Регистрация: 28.07.2014
Сообщений: 104
07.09.2014, 22:38  [ТС]
Да, Спасибо, я думал, что символьный тип как то отдельно можно записать.
По аналогии List.String - List.Simvol, а тут получается я на символ вышел, но до конца это не осознал, думал что это просто часть строки, которую могу заменять чем хочу.
0
7 / 7 / 5
Регистрация: 28.07.2014
Сообщений: 104
22.09.2014, 03:00  [ТС]
Возникла такая проблема: использую функцию AnsiPos('Cat', 'The cat sat on the Cat mat'). Мне надо заменить первое 'Cat' значением из переменной типа string. Пусть есть переменная word:String. Как это будет правильно записано?
P.s. из справки AnsiPos ( const Needle, HayStack : string ) мне не понятно
0
Эксперт Pascal/Delphi
 Аватар для droider
4882 / 2819 / 862
Регистрация: 04.10.2012
Сообщений: 10,247
22.09.2014, 05:54
Цитата Сообщение от TampLieR Посмотреть сообщение
использую функцию AnsiPos
во-первых, AnsiPos чувствительна к регистру, во-вторых, чем StringReplase не устраивает?
Delphi
1
2
3
4
5
6
7
8
9
10
11
var
word, text, new_text:string;
begin
word :=Edit1.Text;
text :='The cat sat on the Cat mat';
//заменяем первое слово "сat" в тексте text на слово word 
//без учета регистра
new_text :=StringReplace(text, 'cat', word, [rfIgnoreCase]);
ShowMessage(new_text);
 
end;
0
7 / 7 / 5
Регистрация: 28.07.2014
Сообщений: 104
22.09.2014, 20:50  [ТС]
droider, тут ключевое слово было не заменить. Знаю что AnsiPos чувствительна к регистру и это не очень хорошо, может это как то можно исправить?
А вот для чего она мне нужна:
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
var a, word, s, d, w: String;
i, j, k, l, q, p, n, position: Integer;
begin
a:=Edit1.Text;
  
if trim(Edit1.text)=''
  then begin
    ShowMessage('Введите пожалуйста данные в поле ввода!');
    end else
    a:=' '+a+' ';
 
 
    for q:=2 to length(a)
    do begin
      if (a[q-1]=' ') and (a[q]<>' ') then
      word:=a[q]
      else if (a[q-1]<>' ') and (a[q]=' ')
      then begin
        word:=word+a[q-1];//нашли слово из Edit1
 
        position := AnsiPos(word, List[0]);
        if position=0
        then ShowMessage('Слово не найдено в тексте')
        else ShowMessage('Слово найдено');
 
      end else
        word:=word+a[q];
      end;
 
 
      List.SaveToFile(openDialog1.FileName);
      List.Free;
    end;
end.
Добавлено через 7 минут
position := AnsiPos(word, List[0]); в этой строчке ошибка, никак не хочет читать переменную word

Добавлено через 3 минуты
у List тип TStringList, здесь просто только часть кода, прошу мне верить всё работает кроме считывания переменной word. List[0] считывает хорошо, проверял.

Добавлено через 9 часов 56 минут
Ещё вопрос появился: как написать цикл, чтобы при каждом нажатии кнопки поиск, если edit1 пуст выводилось сообщение - Введите пожалуйста данные в поле ввода!
У меня работает, но однократно.
Delphi
1
2
3
4
if trim(Edit1.text)=''
  then begin
    ShowMessage('Введите пожалуйста данные в поле ввода!');
  end else делаем дальше
0
47 / 27 / 8
Регистрация: 11.05.2010
Сообщений: 169
22.09.2014, 21:01
Цитата Сообщение от TampLieR Посмотреть сообщение
чтобы при каждом нажатии кнопки поиск, если edit1 пуст выводилось сообщение - Введите пожалуйста данные в поле ввода!
У меня работает, но однократно.
может быть - прервать выполнение процедуры?
Например, так:
Delphi
1
2
3
4
5
if trim(Edit1.text)=''
  then begin
    ShowMessage('Введите пожалуйста данные в поле ввода!');
    Exit
  end else делаем дальше
1
7 / 7 / 5
Регистрация: 28.07.2014
Сообщений: 104
22.09.2014, 21:14  [ТС]
Да спасибо! Помогло
А тут не поможешь?
Цитата Сообщение от TampLieR Посмотреть сообщение
position := AnsiPos(word, List[0]); в этой строчке ошибка, никак не хочет читать переменную word
0
47 / 27 / 8
Регистрация: 11.05.2010
Сообщений: 169
22.09.2014, 22:09
Цитата Сообщение от TampLieR Посмотреть сообщение
position := AnsiPos(word, List[0]); в этой строчке ошибка, никак не хочет читать переменную word
не очень понятно, что предполагается во фразе "...не хочет читать переменную word..."
Может быть немного подробнее описать проблему?

Добавлено через 5 минут
Да, я предлагаю переменную word переименовать во что-нибудь иное, так как возникает коллизия с типом данных word:
тип Word - целое число, поддерживающее положительные значения от 0 до 65535. Это занимает 16 бит памяти.
Может быть, заморочка именно в этом?
1
7 / 7 / 5
Регистрация: 28.07.2014
Сообщений: 104
23.09.2014, 17:11  [ТС]
Ну вот скажите, почему я делаю такие нелепые ошибки! Ведь можно же было переменную по-другому назвать! il-ir, Спасибо, всё работает!

Добавлено через 18 часов 22 минуты
Подскажите пожалуйста как правильно цикл написать!?
Delphi
1
2
3
4
5
6
for n := 0 to x
  do begin
  k := PosEx('.', List[p], k+1);
  Pozizi9_to4ki[n]:=k;
  x:=x+1;
  end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.09.2014, 17:11
Помогаю со студенческими работами здесь

Поиск и замена символа в тексте TextBox
на форме есть текстбокс (multiline) в нем отображается некий текст, как в тексбоксе произвести поиск и замену символов? например после...

Поиск символа, который встречается в тексте наибольшее количество раз
Поиск символа, который встречается в тексте наибольшее количество раз. Помогите пожалуйста с реализацией. У меня получилось только в...

Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +, заменить символом -
Дан текст. Если в тексте нет символа +, то оставить текст без изменения, иначе каждую из цифр, предшествующую первому вхождению символа +,...

Определить позицию первого символа "a" в тексте и вывести на экран строку, начиная с этого символа
Здравствуйте. Имеется задача: Задан текст. Определить позицию первого символа &quot;a&quot; в тексте и вывести на экран строку, начиная...

Количество вхождений определённого символа в тексте, общее число символов, число слов в тексте
Приветствую! Мне нужно написать программу, которая считает кол-во слов, символов(без учёта пробелов) и встречаемость какой-либо буквы в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru