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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2008, 18:43   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

предвосхищая следующий вопрос, а как с четырмя? :-)
вот код для неограниченного числа переменных!
(внимание, переменные заносятся последовательно в одную и ту же переменную OneItem, отображаются на экране и теряются. Если нужно сохранить все найденные переменные, нужно заводить либо массив, либо создавать динамический список...
Либо воспользоваться встроенныем компонентами, например, идеально подойдёт TStringList)

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  s, OneItem : string;
  iPos1 : integer;
  Count : integer;
begin
  s:='slovo1|slovo2|третье |четвёртое| пятое';
  {если в конце строки нет разделителя, добавим
    это необязательно, просто для удобства/упрощения
       работы цикла}
  if copy(s,Length(s),1)<>'|' then s := s + '|';

  Count := 0; {счётчик найденных значений = 0}

  while Pos('|',s)>0 do begin
    iPos1:=Pos('|',s);
    OneItem := Copy(s,1,iPos1-1);
    Inc(count);
    ShowMessage(
      'Найдена '+IntToStr(Count)+'-я переменная'+chr(13)+
      'переменная равна: '+OneItem);
    {удаляем из строки найденную переменную}
    Delete(s,1,iPos1);
  end;

end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.07.2008, 21:37   #12
terminadoor
Пользователь
 
Регистрация: 26.06.2008
Сообщений: 86
По умолчанию

Ёщё вопрос. Как считать третю строку в файле в переменную типа string?
TerMinAdoOR
terminadoor вне форума Ответить с цитированием
Старый 02.07.2008, 03:04   #13
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от terminadoor
Как считать третю строку в файле в переменную типа string?
К сожалению, только последовательно...
Код:
  
  Reset(f); {открыли файл на чтение}
  Readln(f); {прочитали первую строчку - куда считывать, не указали - 
тут можно указать переменную типа string,
а можно и не указывать, если содержимое строки не интересует...}
  Readln(f); {прочитали вторую строчку}
  Readln(f,S); {прочитали третью строчку в переменную S}
Hint. Можно прочитать сразу весь файл в объект типа TStringList и потом иметь доступ к любой строчке в любой момент:
Код:
  var  TS : TstringList;
begin
   TS := TStringList.Create; {создаём наш объект}

   TS.LoadFromFile('ИмяТекстовогоФайл.тут');

   {всё, файл загружен!
    тогда третья строчка вот -
    TS.Strings[2]  (счёт строк идёт от нуля)}
или
    S := TS.Strings[2]; {третью строчку в переменную S}
    ...
   FreeAndNil(TS); {уничтожаем объект}
end;
и последнее, это код не защищенный от ошибок: в вышеуказанных примерах не проверяется, а есть ли в данном файле третья строка... :-)
для первого примера надо каждый раз перед чтением проверять EOF(f) - признак конца файла.
во втором примере, после LoadFromFile в TS.Count находится число строк файла.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.07.2008, 08:12   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Я наверное уже надоел, но если с тремя переменными?
Для этого есть Базы Данных.
Но если с текстовиком хочеш морочится рекомендую TStringList применять. В нем просто и легко отделять поля в массив.
Допустим в один Лист скидываешь весь текст, тогда в другой скидываешь текушую строку, в Delimiter прописываешь разделитель полей, а в DelimitedText саму строку, и получаешь массив строк - поля.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.07.2008, 12:02   #15
terminadoor
Пользователь
 
Регистрация: 26.06.2008
Сообщений: 86
По умолчанию

А если есть файл примерно такой:
Поле1|asasas|dasdasdas|dsadasd
Поле2|asasas|dasdasdas|dsadasd
Поле3|asasas|dasdasdas|dsadasd

Как мне вывести все первие поля слева (поле1,поле2,поле3)?
TerMinAdoOR
terminadoor вне форума Ответить с цитированием
Старый 02.07.2008, 12:32   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Например так:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var s,t:TStringList; i:integer;
begin
t:=TStringList.Create;
s:=TStringList.Create;
t.LoadFromFile('file1.txt');
StringGrid1.ColCount:=t.Count;
s.Delimiter:='|';
//********* FOR ******************
for i :=0  to t.Count-1 do
begin
 s.DelimitedText:=t[i];
 if StringGrid1.RowCount<s.Count then StringGrid1.RowCount:=s.Count;
 StringGrid1.Cols[i].Delimiter:=s.Delimiter;
 StringGrid1.Cols[i].DelimitedText:=s.DelimitedText;
end;
//******* END FOR ****************{}

end;
file1.txt содержит твои эти поля.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.07.2008, 16:09   #17
terminadoor
Пользователь
 
Регистрация: 26.06.2008
Сообщений: 86
По умолчанию

А как записать с помощью TStringList? И ёще: можно комментарии к предидущей программе.
TerMinAdoOR
terminadoor вне форума Ответить с цитированием
Старый 03.07.2008, 16:28   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
комментарии к предидущей программе.
TStringList.Create - Создание класса
t.LoadFromFile('file1.txt'); - Загрузка в него файла, каждая строка которого будет помещаться в новый элемент списка.
s.Delimiter:='|'; - Описывается разделитель полей
s.DelimitedText:=t[i]; - заносится текущая строка из считанного файла в свойство которое разделяет по ранее описанному разделителю строку в массив.

Остально - авторские выкрутасы которые могли бы быть написаны и по другому. За остальным см. Хелп где все описано точнее.

Цитата:
А как записать с помощью TStringList?
А обратной процедурой, а потом SaveToFile
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.07.2008, 18:14   #19
terminadoor
Пользователь
 
Регистрация: 26.06.2008
Сообщений: 86
По умолчанию

А какой компонент лучше всего подходит для вывода данных?
TerMinAdoOR
terminadoor вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка чтения KiSH333 БД в Delphi 12 22.08.2008 11:09
Запущена ли програма? RealSHELS Общие вопросы Delphi 4 14.06.2008 21:54
програма которая виводит все простие числа от 1 до 1000000 до 1сек PAWLO1993 Паскаль, Turbo Pascal, PascalABC.NET 7 12.06.2008 01:15
Програма для вывода геометрической фигуры Hworang Паскаль, Turbo Pascal, PascalABC.NET 8 30.10.2007 19:42
Програма тестирования студентов. lin Помощь студентам 6 20.04.2007 09:23