Урок 19 Работа со строками.Извлечение из текста нужной нам части.
April 5, 2006
в колонках играет Rolling Stones-Under my thumb
Пора уже начат изучать работу со строками.Допустим вам надо из файла получить 10 строчку, или кусок текста, заключенный между определёнными сочетаниями символов.
Начнём с простого.Создайте новый проект и сохраните его в отдельную папку.Создадим файл test.txt и скопируем в папку с нашим проектом.
Содержимое файла test.txt
<title>Blow
Кокаин
Один из величайших фильмов про наркотики.
Снимаются Джонни Депп и Пенелопа Крус
</title>
<title>Trainspotting
На игле
Ещё один крутой фильм про наркотики
да
</title>
<title>9 рота
9 рота
Отстой полный!Наши режиссёры снимают фильмы
только про войну, бандюгов, ментов и
на исторические темы.
А этот фильм содран с "Цельнометаллической оболочки" Стенли Кубрика.
</title>
Теперь напишем пользовательскую функцию LoadFilm, которая в TStrings* будет загружать информацию по интересующему нас фильму.
void __fastcall TForm1::LoadFilm(AnsiString title,AnsiString FileName,TStrings *Out)
{
Out->Clear();//очищаем массив строк
TStringList *A = new TStringList;//создаём TStringList
A->LoadFromFile(FileName);//загружаем в него файл
String s;
int i=0;
int k=0;
while(i<A->Count)
{
s=A->Strings[i];//перебираем строки
if(s.Pos("<title>"+title)!=0){k=1;}//если в строке встречается <title>название_фильма , то к=1
if(s.Pos("</title>")!=0){k=0;}//если в строке встречается </title> , то k=0
if(k==1 && s.Pos("<title>")==0){Out->Add(s);}//если к=1 и в строке не встречается <title>, то добавляем строку в TStrings*
i++;
}
delete A;//освобождаем память от TStringList A
}
Теперь объявите функцию в unit1.h
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TMemo *Memo1;
TListBox *ListBox1;
void __fastcall LoadFilm(AnsiString title,AnsiString FileName, TStrings *Out);
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
Теперь киньте на форму кнопку, Memo и ListBox.
Два раза кликинте по кнопке и напишите следующий код
LoadFilm("Blow","c:\\1.txt",Memo1->Lines);
LoadFilm("Trainspotting","c:\\1.txt",ListBox1->Items);
Нажмите f9
Обратите внимание!
Мы создали функцию LoadFilm(AnsiString title,AnsiString FileName, TStrings *Out) ;
Вместо AnsiString title вы можете написать какую-нить переменную типа String или AnsiString.Аналогично и с AnsiString FileName.Вместо TStrings *Out вы можете вставить любые данные типа TStrings *.
Разберём выделенную на рисунке строку.
property -указывает что это св-ва
TStrings* - тип, который возвращает метод Items
TListBox:: - показывает, какому компоненту принадлежит метод или функция.
Что можно делать со строками:
String s;
int i;
s="hello my oligofriend!";
i=s.Pos(" ");//функция находит первый встретившийся пробел и возвращает его порядковый номер(в скобках может быть любой набор символов)
i=s.LastDelimiter(" ");// находит пробел начиная с конца строки, и возвращает его порядковый номер
s=s.Delete(1,6);//функция удаляет шесть символов, начиная с первого
s=s.SubString(4,12);// функция выделяет 12 симолов, начиная с четвёртого из строки s
i=s.Length(); //функция возвращает количество символов в строке
s=s.LowerCase ();//функция приводит строку к нижнему регистру(все буквы становяться строчными)
s=s.UpperCase ();//функция приводит строку к верхнему регистру(все буквы становяться заглавными)
i=s.ToInt();// преобразует строку в целое число, если строка содержит что-то, кроме цифр, то выдаёт ошибку
char *d=s.c_str(); //преобразует строку в char*
На сегодня хватит, потом продолжим...
Если есть вопросы по этому материалу или вопросы в принципе, пишите на мыло, ответы постараюсь выложить в последующих уроках.
Author of article - MA F*CKA CREW 2006
www.builderhelper.3dn.ru
builder.helper@rambler.ru