Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 21.09.2012
Сообщений: 9

Чтение строк из файла

21.09.2012, 10:23. Показов 3932. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Подскажите как сделать вот это: сделать обработку, которая считывает входной файл.
Читает каждую строку файла и раскладывает каждую строку на поля.
Поля разделены символом ";".

Входной файл вот такой:


поле1;поле2;поле3;поле4;поле5;Строка1;
поле1;поле2;поле3;поле4;поле5;Строка2;
поле1;поле2;поле3;поле4;поле5;Строка3;
поле1;поле2;поле3;поле4;поле5;Строка4;
поле1;поле2;поле3;поле4;поле5;Строка5;
поле1;поле2;поле3;поле4;поле5;Строка6;
поле1;поле2;поле3;поле4;поле5;Строка7;
поле1;поле2;поле3;поле4;поле5;Строка8;
поле1;поле2;поле3;поле4;поле5;Строка9;
поле1;поле2;поле3;поле4;поле5;Строка10;

Подскажите плиз как сделать или где найти подобный пример с описанием
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.09.2012, 10:23
Ответы с готовыми решениями:

Чтение строк из файла в массив
Здравствуйте! И так снова не нашел подходящих решений на форуме и в интернете, обращаюсь к Вам. Имеется файл с текстом вида: ...

Чтение строк из файла в Дэльфи
Вечер добрый. Помогите пожалуйста понять, где ошибка.Условие таково. Дан текстовый файл, содержащий строковые величины. В последней его...

Чтение строк из текстового файла в memo
Привет. Как сделать чтобы при чтении строк из файла такого вида: 123 456,78 789 12,5 987 654 321 98,8 они записывались в memo...

10
 Аватар для Alex_pac
1302 / 708 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
21.09.2012, 10:31
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
29
30
31
32
33
34
35
uses StrUtils;
// строку в список (explode)
procedure str_explode(const sDelimiter, sSrc :string; resStr: TStrings; lLimit :integer = -1; bWithEmpty :boolean = true);
// разбивает в массив строку sSrc по разделителю sDelimiter
// lLimit - предел длины массива (-1 - без предела)
// bWithEmpty - разрешать пустые строки
var i, ni, dl :integer;
begin
    dl := Length(sDelimiter);
    resStr.Clear;
    if Length(sSrc) = 0 then exit;
    if lLimit <= 0 then lLimit := MaxInt;
    i := 1;
    repeat
        ni := PosEx(sDelimiter, sSrc, i);
        if (ni = i) and not bWithEmpty then begin
            inc(i, dl);
        end else if (ni = 0) or (resStr.Count = lLimit) then begin
            resStr.add(Copy(sSrc, i, MaxInt));
            break;
        end else begin
            resStr.add(Copy(sSrc, i, ni - i));
            i := ni + dl;
        end;
    until false;
end;
 
function str_implode(rz:string; list:TStrings): string;
var i:integer;
begin
  result:='';
  if list.Count=0 then exit;
  for i := 0 to list.Count - 2 do result:=result+list[i]+rz;
  result:=result+list[list.Count-1];
end;
приминение:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
var s,s2:TStringList; i:integer;
begin
s:=TStringList.Create;
s2:= TStringList.Create;
s.LoadFromFile('адрес файла');
for i:=0 to s.Count-1 do begin
   str_explode(';',s[i],s2,-1,false);
   // s2 содержит список из поле1 поле2 и тп
   ShowMessage(s2.text); // выведем список в сообщение ибо ХЗ что с ним делать
end;
s.free;
s2.free;
end;
1
0 / 0 / 0
Регистрация: 21.09.2012
Сообщений: 9
21.09.2012, 10:34  [ТС]
Спасибо! А можете написать что называется с нуля для чайника... Я просто Delphi пока что знаю совсем чуть-чуть
0
 Аватар для Ksen Ters
14 / 14 / 2
Регистрация: 22.01.2012
Сообщений: 80
Записей в блоге: 1
21.09.2012, 10:35
открываешь файл процедурой reset, считываешь одну большую строку процедурой readln, получается к примеру так: s='поле1;поле2;поле3;поле4;поле5;Строка1 ;' потом эту большую строку процедурой разбиваешь на требуемые поля, например, с помощью цикла
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
var pole:array of string;
i:integer;
//...
begin
//...
i:=0;
while length(s)<>0 do
begin
pole[i]:=copy(s,1,pos(s,';')-1);//первое поле
delete(s,1,pos(s,';'));
inc(i);//увеличиваем счетчик
end;
в итоге в массиве pole будут требуемые поля(если они строкового типа)
возможно будут другие варианты, если поля в файле не строкового типа
возможно кто-то из форумчан предложит более рациональное решение
1
0 / 0 / 0
Регистрация: 21.09.2012
Сообщений: 9
21.09.2012, 11:05  [ТС]
и у меня ещё вопрос: какой интерфейс должен быть у этой программы?
0
 Аватар для Alex_pac
1302 / 708 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
21.09.2012, 11:57
какой интерфейс должен быть у этой программы
TStringGrid и пара кнопок
0
0 / 0 / 0
Регистрация: 21.09.2012
Сообщений: 9
21.09.2012, 12:08  [ТС]
Цитата Сообщение от Alex_pac Посмотреть сообщение
TStringGrid и пара кнопок
а можете написать как это будет выглядеть в общем коде?
0
17 / 17 / 0
Регистрация: 19.02.2012
Сообщений: 68
21.09.2012, 12:57
TStringList
http://www.delphibasics.ru/TStringList.php

Обрати внимание на пример кода "Пример кода : Использование DelimitedText, Delimiter и QuoteChar"
Это, если я правильно понял, именно то что нужно.
0
0 / 0 / 0
Регистрация: 21.09.2012
Сообщений: 9
21.09.2012, 13:19  [ТС]
Цитата Сообщение от drmiller Посмотреть сообщение
TStringList
http://www.delphibasics.ru/TStringList.php

Обрати внимание на пример кода "Пример кода : Использование DelimitedText, Delimiter и QuoteChar"
Это, если я правильно понял, именно то что нужно.
ещё бы знать как это правильно применить... Alex_pac хороший код написал. Но как всё это вместе соединить, чтобы работало и не выдавало ошибок...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 12
21.09.2012, 14:36
Цитата Сообщение от yurash-8989 Посмотреть сообщение
как всё это вместе соединить, чтобы работало и не выдавало ошибок...
Для того, чтобы это работало, надо как минимум знать, что ты хочешь делать с теми значениями которые ты получишь после разбиения. А разбить можно вот так:

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
procedure TForm1.Button1Click(Sender: TObject);
var
   AllData, Part : TStringList;
   i : Integer;
begin
   AllData := TStringList.Create;
   try
      AllData.LoadFromFile('myfile.txt');
      Part := TStringList.Create;
      try
 
         for i := 0 to Pred(AllData.Count) do
         begin
            Part.Clear;
            ExtractStrings([';'], [], PChar(AllData[i]), Part);
            // Тут обрабатываешь содержимое списка Part как тебе нужно. Он содержит слова из i-ой строки файла
         end;
 
      finally
         Part.Free; // Удаляешь тот список, в который разбивались строки
      end;
   finally
      AllData.Free; // Удаляешь список, в который читался файл
   end;
end;
1
0 / 0 / 0
Регистрация: 21.09.2012
Сообщений: 9
24.09.2012, 16:29  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
Для того, чтобы это работало, надо как минимум знать, что ты хочешь делать с теми значениями которые ты получишь после разбиения. А разбить можно вот так:...
В том то и дело что я не понимаю с чего начать. Может быть есть какой-нибудь пример, аналогичный этому заданию, где всё подробно расписано, каждый шаг?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.09.2012, 16:29
Помогаю со студенческими работами здесь

Чтение информации из текстового файла в массив строк.
Считать из текстового файла информацию в массив строк. Отобразить на экран. Удалить повторяющиеся слова. Отобразить на экран. Переписать...

Программа жалуется на чтение числа строк и столбцов из файла
Здравствуйте. Посмотрите, пожалуйста, что можно сделать. У меня не процедура сделана на Лазарусе, но, кажется, у них много схожего. Нужно...

Чтение части файла из файла и показ его в Image
Здравствуйте! Есть большой файл состоящий из записанных один за одним графических файлов. Данные записи (длины файлов итд) хранятся...

Чтение строк
Здравствуйте, уважаемые! Задался вопросом - Как читать строку посимвольно? А можно считывать по, предположим, 32 символа сразу? ...

Чтение строк
Как мне прочитать строки из dos окна (Черное онко с белыми буква если кто не вкусре). Типа DOs написала строку в своем окне и как с помошью...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru