Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
AngryTawer
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 21
1

Как считывать из текстового файла, пропуская первую строку?

11.10.2017, 09:05. Просмотров 833. Ответов 10
Метки нет (Все метки)

Имею такой код:
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
procedure TF_knopka.fZagrClick(Sender: TObject);                   // Закрузка данных
var ft:TextFile;
    a,i,j:longint;
    st:string;                                                // Строчка
begin
for i:=0 to StringGrid1.RowCount-1 do
    for j:=0 to StringGrid1.ColCount-1 do StringGrid1.Cells[j,i]:='';     // Обнуление таблицы
StringGrid1.RowCount:=1;
 
if (OpenDialog1.Execute)                                                    // Попытка открытия
   then begin
        AssignFile(ft,OpenDialog1.FileName);
        Reset(ft);                                                       // Обнуление
        while not eof(ft) do                                             // Пока не конец файла
              begin
              readln(ft,st);                                              // Считываем файл по st - строчкам
              j:=0;
              for i:=0 to length(st) do                                   // От 1 до последней строчки ( цикл )
                  if st[i]=chr(9)                                         // Проверка на табуляцию
                     then j:=j+1
                     else StringGrid1.Cells[j,StringGrid1.RowCount-1]:=StringGrid1.Cells[j,StringGrid1.RowCount-1]+st[i];  // После каждой табуляции новый столбик
              StringGrid1.RowCount:=StringGrid1.RowCount+1;               // Переход на новую строку
              end;
        StringGrid1.RowCount:=StringGrid1.RowCount-1;  // Задаётся кол-во строчек
        StringGrid1.FixedRows:=1;      // Фиксиррованная строчка до текста
        CloseFile(ft);                 // Закрытие файла
        end;
end;
И он читает все строчки, и записывает их в нужные столбики таблицы. Но первая строка у меня в текстовом файле = текст, и он там никак не нужен. Как сделать так, чтобы он при прочтении не учитывал первую строчку, не меняя коренным образом сам код. Просто введя какое-то условие или что-то вроде того. ( В память записывать и оттуда брать нельзя, нужно именно таким образом )
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2017, 09:05
Ответы с готовыми решениями:

Как в memo считать из файла первую строку
Как в memo считать из файла 1 строку ? procedure TForm1.Button1Click(Sender: TObject); var ...

Как записать слово в n-ю строку текстового файла?
Причём, если n-я строка уже существует, то перезаписать её (записать туда только заданное слово);...

Как прочитать первую строку из текстового файла?
Есть текстовый файл, нужно сделать BATник который бы первую строку из текстового файла присваивал...

Считывать информацию из файла, пропуская пустые строки
В общем никак не пойму в чём проблема.. Условие while не срабатывает,вот код: StreamReader file...

Из текстового файла считывать строку, обрабатывать и результат записывать в тот же файл
Программа должна работать следующим образом, из текстового файла считывать строку, обрабатывать и...

10
Алекcей
393 / 375 / 147
Регистрация: 11.12.2013
Сообщений: 1,978
11.10.2017, 09:40 2
Лучший ответ Сообщение было отмечено AngryTawer как решение

Решение

перед while not eof(ft) добавьте: readln(ft,st);
1
AngryTawer
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 21
11.10.2017, 09:53  [ТС] 3
Цитата Сообщение от Алекcей Посмотреть сообщение
перед while not eof(ft) добавьте: readln(ft,st);
А зачем? Если оно есть после while not eof(ft). Что-то изменится?
0
Алекcей
393 / 375 / 147
Регистрация: 11.12.2013
Сообщений: 1,978
11.10.2017, 09:55 4
для того, чтобы пропустить первую строку. если правильно понимаю она не нужна
0
AngryTawer
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 21
11.10.2017, 09:58  [ТС] 5
Цитата Сообщение от Алекcей Посмотреть сообщение
для того, чтобы пропустить первую строку. если правильно понимаю она не нужна
Понял, всё работает. Как я понимаю она просто считывает одну строку, и ничего с ней не делает? Спасибо большое.
0
D1973
Модератор
4012 / 2885 / 1393
Регистрация: 21.01.2014
Сообщений: 12,247
Записей в блоге: 3
Завершенные тесты: 1
11.10.2017, 10:00 6
Цитата Сообщение от AngryTawer Посмотреть сообщение
В память записывать и оттуда брать нельзя, нужно именно таким образом
А почему, если этот код ну вот абсолютно не оптимальный?
0
AngryTawer
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 21
11.10.2017, 10:02  [ТС] 7
Цитата Сообщение от D1973 Посмотреть сообщение
А почему, если этот код ну вот абсолютно не оптимальный?
Потому что я первокурсник, и это задание на лабу, и там нельзя ничем другим пользоваться. А так-то я понимаю, что с памятью намного лучше.
0
qwertehok
2593 / 2301 / 615
Регистрация: 29.08.2013
Сообщений: 15,419
11.10.2017, 10:10 8
после 17 строки вставь условие
Delphi
1
if j=0 then begin end else begin
а end поставь перед 23 строкой
костыль конечно, но быстро
0
D1973
Модератор
4012 / 2885 / 1393
Регистрация: 21.01.2014
Сообщений: 12,247
Записей в блоге: 3
Завершенные тесты: 1
11.10.2017, 10:15 9
Цитата Сообщение от AngryTawer Посмотреть сообщение
Потому что я первокурсник
А первокурсникам справкой пользоваться - грех великий?
1. Что мешает вместо двойного цикла в момент очистки сделать одинарный?
Delphi
1
2
for i:=0 to StringGrid1.RowCount-1 do
   StringGrid1.Rows[i].Clear;
2. Зачем такие извращения с обходом в цикле каждой строки?
Delphi
1
2
3
4
5
6
7
8
9
 j:=0;
 while not eof(ft) do 
  begin
   readln(ft, st);   
   StringGrid1.Rows[j].Delimiter := #9;
   StringGrid1.Rows[j].DelimitedText := s;
   StringGrid1.RowCount := StringGrid1.RowCount + 1;
   inc(j);
  end;
0
AngryTawer
0 / 0 / 0
Регистрация: 13.09.2017
Сообщений: 21
11.10.2017, 11:54  [ТС] 10
Цитата Сообщение от D1973 Посмотреть сообщение
Зачем такие извращения с обходом в цикле каждой строки?
Как учат, так и делаем
0
droider
Universal
Эксперт Pascal/Delphi
4443 / 2476 / 780
Регистрация: 04.10.2012
Сообщений: 9,014
11.10.2017, 12:00 11
Цитата Сообщение от AngryTawer Посмотреть сообщение
Как учат
плохо учат. Уволить!
0
11.10.2017, 12:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2017, 12:00

Напечатать первую строку, пятую строку текстового файла
имеется текстовый файл , напечатать а) его первую строку б) его пятую строку

Удалить первую строку из текстового файла
Дан текстовый файл. Удалить из него первую строку. :help: Пожалуйста помогите в написании...

Нужно прочитать из текстового файла определённую строку (не первую)
Люди, спасайте. Перерыл весь инет, никак найти не могу. В книге у меня какой-то бред написан. Нужно...


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

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

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