Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.08.2010, 17:11
Rhot Rhot вне форума
Прохожий
 
Регистрация: 27.07.2010
Сообщения: 12
Репутация: 10
По умолчанию Чтение текстового файла

Здравстуйте, есть такая проблема:

Есть текстовый фаил формата:

1234 3214 2431
4311 2314 2233
4123 4123 1245

(на самом деле файл больше, не 3на3 а 6на20)

И есть набор едитбоксов, задача считать этот файл и вывести значения в едитбоксы в виде таблицы, такого же формата.
Как сделать это наиболее эффективно, не выписывая килотонну кода?

Так же интересует сама реализация считывания, т.к. формат известен, то можно сделать переменные (или массив) string[5] и идти через обычный read(фаил, переменные) и в конце строки писать readln (это чтобы не парится с отделением пробелов) или можно как-то лучше?

Вопрос конечно вышел сумбурным, если что-то не понятно в нем, я уточню.
Спасибо за внимание.
Ответить с цитированием
  #2  
Старый 04.08.2010, 20:06
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну тут скорее вопрос к тому - зачем тебе именно Edit'ы. Проще использовать TStringGrid. Хотя можно извратиться и с TEdit - надо просто дать им осмысленные имена (Edit11 - левый верхний, Edit12 - следующий в первой строке и т.д.). Далее вычитываешь все в массив и по индексу массива находишь соотв. Edit (читать именно в массив совершенно не обязательно - тебе достаточно рассчитать индексы соотв. ячейки).

Теперь о чтении.
Я бы читал через TStringList - за один раз считаешь весь файл целиком в виде списка строк. А вот отдельную строку надо будет парсить руками. Тут опять же вопрос - на сколько должен быть универсальный парсер. Если у тебя гарантированно 6 груп по 4 цифры, разделенные пробелами, то можно просто по индексам с помощью функции Copy вырезать нужные знаяения. Если кол-во груп может быть меньше или длинна каждого значения может быть любой, то придется честно "резать" строку по пробелам (Pos и Copy).
Ответить с цитированием
  #3  
Старый 04.08.2010, 23:05
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Цитата:
Сообщение от lmikle
придется честно "резать" строку по пробелам (Pos и Copy)
В этом моменте не соглашусь - читай про разбиение строк через тот же TStringList.
А в остальном - Imikle прав...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #4  
Старый 05.08.2010, 00:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Опять же, теперь я позволю себе не согласиться.
Да, через TStringList заменой пробела на #13#10 быстрее написать и короче выглядит. а теперь попробуй обработать файлик размером так в пару гигов. А потом моим методом. И посмотри - что быстрее будет. Да TStringList умрет только когда подумает о таком безобразии. Там вообще все надо будет руками писать, что бы хоть более-менее адекватно работало. Да и еще придумывать алгоритм хранения/накопления информации, что бы и задача решалась, и ресурсы сверх меры не жрались.
Да, возражения, типа "да тут файлик в 500 байт - нафига так сложно, вполне резонны. Однако, не так сложно и написать код "резанья" по пробелам, а, глядишь, человек разберется как пользоваться нужными функциями и следующий раз сделает все сам.
Ответить с цитированием
  #5  
Старый 05.08.2010, 00:24
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Теперь я не соглашусь. Построчно читать можно и через FileAssign - Reset - Readln - ..., кстати, а вот разбить в TStringList и обращаться таким образом - гораздо удобнее. Геморроя меньше.
И ты не подумал, что, опять же, можно построчно обрабатывать один стринглист, а строки на ячейки разбивать уже во втором... как вариант...
З.Ы. люблю интеллектуальные споры с модераторами...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #6  
Старый 05.08.2010, 00:32
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, в чем-то ты прав. Собственно. в том, что читать надо через AssignFile и т.д. Просто лень. Поверь, мне как-то пришлось обрабатывать ОЧЕНЬ БОЛЬШОЙ файл и я точно знаю, что там будут проблемы с быстродействием, если делать все через TStringList. Короче, средства надо выбирать исходя из задачи
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:45.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025