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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2014, 17:41   #1
vaximan
Пользователь
 
Аватар для vaximan
 
Регистрация: 16.06.2014
Сообщений: 23
Вопрос Работа со строками.

Доброго времени суток светлым умам форума)
Сразу к делу!
Имею текстовый файл со 100 строками вида
bhd27-02v x23fv ###Nuznoe:Nuznoes@@@hc7hq39e1d
f228fA^Q({EVt###Nuznoe:Nuznoe@@@hv4abetfp vta
sb s7rweor8cwrt5 awo7###Nuznoe:Nuznoe@@@h74c0a[qatc7ae4t6qtc]w7t]
Программа должна выводить из них только
Nuznoe:Nuznoe
Nuznoe:Nuznoe
Nuznoe:Nuznoe

Некоторые строки вообще не имеют Nuznoe:Nuznoe (их должна просто пропускать)
Саму подстрочку получал так
Код:
l:=Copy(s,Pos('###',s),Length(s))
Delete(l,Pos('@@@',l),Length(l));
Но это работает только с одной строкой!
Мне нужно решение как это сделать построчно и с пропуском строк не имеющих ###Nuznoe:Nuznoe@@@
А так же интересует как из файла лучше все запихать в переменную s. (Знаю что копать в сторону Readln)
Заранее очень благодарен откликнувшимся
#̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏

Последний раз редактировалось vaximan; 14.09.2014 в 17:44.
vaximan вне форума Ответить с цитированием
Старый 14.09.2014, 17:46   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Я бы делал с помощью регулярок. Вот отличная книжка: http://rutracker.org/forum/viewtopic.php?t=3828631
8Observer8 вне форума Ответить с цитированием
Старый 14.09.2014, 17:46   #3
indexx
Заблокирован
 
Регистрация: 12.09.2014
Сообщений: 544
По умолчанию

Бьём текст на строки например через StringList. В цикле от первой до последней строки ищём первый символ #. Идём вправо, пока не встретим НЕ #. Отрезаем лишнее, и копируем до @.

Последний раз редактировалось indexx; 14.09.2014 в 17:49.
indexx вне форума Ответить с цитированием
Старый 14.09.2014, 19:12   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

И indexx прав, ненужно толкать регулярки куда попало.
Если задача решается без них в 2 строки - то так и надо решать.
Весьма распространено мнение, что регулярки не решают, а откладывают проблему - на хабре можно почитать мнения с кучей пруфов и примеров.

vaximan
на С++ подойдет?

Если в мусоре слева и справа от нужного не может быть решеток и собак - то можно так:

Код:
#include <fstream>
#include <cstring>

int main() {
  std::ifstream ifst("input.txt");
  char buff[255];
  
  while (false == ifst.eof()) {
    ifst.getline(buff, 255);

    int start, finish;

    for (start = strlen(buff); start >= 0; start--)
      if (buff[start] == '#') break;
    if (start < 0) continue;

    for (finish = 0; finish < strlen(buff); ++finish)
      if (buff[finish] == '@') break;
    if (finish >= strlen(buff)) continue;

    // твоя строка находится между buff[start+1] и buff[finish - 1]
  }
}
Не проверял, могут быть опечатки.

Последний раз редактировалось Stilet; 14.09.2014 в 22:02.
rrrFer вне форума Ответить с цитированием
Старый 14.09.2014, 21:34   #5
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Вот так попробуйте: ссылка

А это у вас C#?
8Observer8 вне форума Ответить с цитированием
Старый 15.09.2014, 08:42   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Мож я чото не понял, но... Надо считать файл и отфильтровать из него построчно только то, что попадается между ### и @@@? Так что-ли?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 15.09.2014, 15:36   #7
vaximan
Пользователь
 
Аватар для vaximan
 
Регистрация: 16.06.2014
Сообщений: 23
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Мож я чото не понял, но... Надо считать файл и отфильтровать из него построчно только то, что попадается между ### и @@@? Так что-ли?
Именно это мне и нужно! Кстати символы @@@ и ### условны.Я могу их поменять на что угодно.Мне важен сам факт того что файл будет построчно прочитан найдены строки с содержанием типа ###Nuznoe:Nuznoe@@@,отфильтрованы до Nuznoe:Nuznoe и выведены.

Чуть не забыл пишу на Delphi 7, так что с кодом на Си проблемы)

Цитата:
Сообщение от indexx Посмотреть сообщение
Бьём текст на строки например через StringList. В цикле от первой до последней строки ищём первый символ #. Идём вправо, пока не встретим НЕ #. Отрезаем лишнее, и копируем до @.
Это понятно! Принцип я нашел сразу.Вот только сюда пришел так как не знаю как это реализовать программно.Могу лишь пока ввести в переменную s строку,отфильтровать ее и вывести.А нужно:
1.До 100 строк.
2.Прочитать файл и ввести построчно в s.
3. Построчно фильтровать.
#̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏

Последний раз редактировалось Stilet; 15.09.2014 в 16:04.
vaximan вне форума Ответить с цитированием
Старый 15.09.2014, 15:46   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
Подмигивание

Цитата:
Сообщение от vaximan Посмотреть сообщение
Именно это мне и нужно! Кстати символы @@@ и ### условны.Я могу их поменять на что угодно.Мне важен сам факт того что файл будет построчно прочитан найдены строки с содержанием типа ###Nuznoe:Nuznoe@@@,отфильтрованы до Nuznoe:Nuznoe и выведены.
Дай файл-образец, напишу тебе готовую отлаженную функцию.
Только быстрей давай, пока я не передумал.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 15.09.2014, 15:49   #9
vaximan
Пользователь
 
Аватар для vaximan
 
Регистрация: 16.06.2014
Сообщений: 23
По умолчанию

Вот http://rghost.ru/private/58026930/8b...49712569172abf Надеюсь получится)
#̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏̏
vaximan вне форума Ответить с цитированием
Старый 15.09.2014, 15:52   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Дай файл-образец, напишу тебе готовую отлаженную функцию.
Только быстрей давай, пока я не передумал.
В первом посте образец.. Только давай быстрее, пока ТС не передумал
Код:
var
	s : string;
begin
	ReadLn(s);
	WriteLn(Copy(s, Pos('###', s)+3, Pos('@@@', s)-Pos('###',s)-3))
end.
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со строками weech Помощь студентам 5 11.03.2012 16:05
Работа со строками KatruKot Microsoft Office Word 6 20.02.2012 02:09
C# Работа со строками Rikhard Общие вопросы C/C++ 1 08.12.2010 22:29
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
работа со строками NAZE Общие вопросы Delphi 1 16.06.2010 00:18