С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Starkow
0 / 0 / 1
Регистрация: 23.01.2013
Сообщений: 117
1

Считывание файла

30.07.2013, 20:23. Просмотров 819. Ответов 4
Метки нет (Все метки)

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

Текстовый файл:
Заголовок:
текст1
текст2
текст3
Заголовок2:
текст4
текст5
текст6
текст7

И в зависимости от количество "заголовков" создавала массив кнопок столбцом. и при нажатии на кнопку выводились все тексты
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2013, 20:23
Ответы с готовыми решениями:

считывание файла
Добрый день. Есть вопрос может кто сталкивался. Мне нужно считать побайтно из одного файла и...

Считывание с файла
Здравствуйте. подскажите пожалуйста, есть dat-файл 11 22 00 22 00 00 00 44 00 13 04 bb e4 0f 09...

Считывание из файла
Имею файл с такой структурой type rec=record images:array of Tobject; end; var...

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

Считывание матрицы из файла
Задание следующее: Дана целочисленная матрица размером nxm. Определите количество элементов...

4
Cyborg Drone
Модератор
5479 / 3296 / 2482
Регистрация: 17.08.2012
Сообщений: 10,586
31.07.2013, 00:57 2
Файл текстовый. Поэтому поясните, что является признаком заголовка - двоеточие в конце оного? Или что-то другое? И как быть с заголовком более чем из одной строки?
0
Starkow
0 / 0 / 1
Регистрация: 23.01.2013
Сообщений: 117
31.07.2013, 14:08  [ТС] 3
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Файл текстовый. Поэтому поясните, что является признаком заголовка - двоеточие в конце оного? Или что-то другое? И как быть с заголовком более чем из одной строки?
Да, двоеточие.
Более 1 строки не будет.
0
Storm Screamer
100 / 106 / 14
Регистрация: 21.04.2013
Сообщений: 1,278
02.08.2013, 06:14 4
Считывать строки. Каждую строку обрабатывать: проверять подходит ли она под признак заголовка, если да, то увеличивать кол-во заголовков, создавать кнопки. Если нет, тогда строку добавлять в массив строк.
0
Vivo
23 / 23 / 6
Регистрация: 27.09.2009
Сообщений: 101
02.08.2013, 20:02 5
Думаю, что можно сделать вот так:
Класс для заголовков и их текстов:
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
  TTitle = class
  public
    Title: string;
    TextList: TStringList;
    constructor Create(aTitle: string);
  end;
Delphi
1
2
3
4
5
constructor TTitle.Create(aTitle: string);
begin
  Title := aTitle;
  TextList := TStringList.Create;
end;

Чтение из файла:
Кликните здесь для просмотра всего текста
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
procedure ReadTextFile(aFileName: string; var aTitleList: TList);
var
  lF: TextFile;
  lBuf: string;
  lCurrTitle: TTitle;
begin
  if (FileExists(aFileName)) then
  begin
    AssignFile(lF, aFileName);
    Reset(lF);
 
    while not EOF(lF) do
    begin
      readln(lF, lBuf);
      if isTitle(lBuf) then
      begin
        lCurrTitle := TTitle.Create(lBuf);
        aTitleList.Add(lCurrTitle);
      end
      else if Assigned(lCurrTitle) then
        lCurrTitle.TextList.Add(lBuf);
    end;
 
    CloseFile(lF);
  end;
end;

Проверка, что это заголовок:
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
function isTitle(aText: string): boolean;
begin
  if aText[Length(aText)] = ':' then
    Result := true
  else
    Result := false;
end;

Создание кнопки:
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure CreateButton(aTitle: string; aLeftPosition, aTopPosition,
  aIndex: integer; aParent: TForm);
var
  lButton: TButton;
begin
 
  lButton := TButton.Create(aParent);
  lButton.Caption := aTitle;
  lButton.Tag := aIndex;
  lButton.OnClick := OnButtonClick;
  lButton.Top := aTopPosition;
  lButton.Left := aLeftPosition;
 
  lButton.Width := 100;
  lButton.Height := 20;
 
  lButton.Parent := aParent;
end;

Обработка клика на кнопке:
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
procedure OnButtonClick(Sender: TObject);
var
  i: integer;
  lIndex:integer;
begin
  Memo1.Clear;
  lIndex := TButton(Sender).Tag;
  for i := 0 to  TTitle(gTitleList[lIndex]).TextList.Count-1 do
    Memo1.Lines.Add(TTitle(gTitleList[lIndex]).TextList[i]);
end;

Объединяющая функция:
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure MainFunction(aFilePath: string;
  aTopButtonStartPosition, aLeftButtonStartPosition: integer; aParent: TForm);
var
  i: integer;
begin
  gTitleList := TList.Create;
  ReadTextFile(aFilePath, gTitleList);
 
  for i := 0 to gTitleList.Count - 1 do
    CreateButton(TTitle(gTitleList[i]).Title, aLeftButtonStartPosition,
      aTopButtonStartPosition + (i * 25), i, aParent);
end;

Использовать:
Кликните здесь для просмотра всего текста
Глобально объявляем: gTitleList: TList;
Запуск:
Delphi
1
MainFunction('C:\1.txt', 10, 10, Form1);
0
02.08.2013, 20:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2013, 20:02

Считывание тестов из файла
Подскажите, как сформулировать и ссылаться на текст вопроса для теста из файла(.txt) таким...

Считывание чисел из файла
Кто знает, помогите, пожалуйста. Вопрос такой: У меня есть текстовый файл с числами внутри...

Построчное считывание из файла
Как считать ПОСТРОЧНО элементы матрицы из файла в Delphi 7??? =О Подскажите позязя =3 ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru