![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Здравстуйте, есть такая проблема:
Есть текстовый фаил формата: 1234 3214 2431 4311 2314 2233 4123 4123 1245 (на самом деле файл больше, не 3на3 а 6на20) И есть набор едитбоксов, задача считать этот файл и вывести значения в едитбоксы в виде таблицы, такого же формата. Как сделать это наиболее эффективно, не выписывая килотонну кода? Так же интересует сама реализация считывания, т.к. формат известен, то можно сделать переменные (или массив) string[5] и идти через обычный read(фаил, переменные) и в конце строки писать readln (это чтобы не парится с отделением пробелов) или можно как-то лучше? Вопрос конечно вышел сумбурным, если что-то не понятно в нем, я уточню. Спасибо за внимание. |
#2
|
|||
|
|||
![]() Ну тут скорее вопрос к тому - зачем тебе именно Edit'ы. Проще использовать TStringGrid. Хотя можно извратиться и с TEdit - надо просто дать им осмысленные имена (Edit11 - левый верхний, Edit12 - следующий в первой строке и т.д.). Далее вычитываешь все в массив и по индексу массива находишь соотв. Edit (читать именно в массив совершенно не обязательно - тебе достаточно рассчитать индексы соотв. ячейки).
Теперь о чтении. Я бы читал через TStringList - за один раз считаешь весь файл целиком в виде списка строк. А вот отдельную строку надо будет парсить руками. Тут опять же вопрос - на сколько должен быть универсальный парсер. Если у тебя гарантированно 6 груп по 4 цифры, разделенные пробелами, то можно просто по индексам с помощью функции Copy вырезать нужные знаяения. Если кол-во груп может быть меньше или длинна каждого значения может быть любой, то придется честно "резать" строку по пробелам (Pos и Copy). |
#3
|
||||
|
||||
![]() Цитата:
А в остальном - Imikle прав... Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#4
|
|||
|
|||
![]() Опять же, теперь я позволю себе не согласиться.
Да, через TStringList заменой пробела на #13#10 быстрее написать и короче выглядит. а теперь попробуй обработать файлик размером так в пару гигов. А потом моим методом. И посмотри - что быстрее будет. Да TStringList умрет только когда подумает о таком безобразии. Там вообще все надо будет руками писать, что бы хоть более-менее адекватно работало. Да и еще придумывать алгоритм хранения/накопления информации, что бы и задача решалась, и ресурсы сверх меры не жрались. Да, возражения, типа "да тут файлик в 500 байт - нафига так сложно, вполне резонны. Однако, не так сложно и написать код "резанья" по пробелам, а, глядишь, человек разберется как пользоваться нужными функциями и следующий раз сделает все сам. |
#5
|
||||
|
||||
![]() Теперь я не соглашусь. Построчно читать можно и через FileAssign - Reset - Readln - ..., кстати, а вот разбить в TStringList и обращаться таким образом - гораздо удобнее. Геморроя меньше.
И ты не подумал, что, опять же, можно построчно обрабатывать один стринглист, а строки на ячейки разбивать уже во втором... как вариант... З.Ы. люблю интеллектуальные споры с модераторами... Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#6
|
|||
|
|||
![]() Ну, в чем-то ты прав. Собственно. в том, что читать надо через AssignFile и т.д. Просто лень. Поверь, мне как-то пришлось обрабатывать ОЧЕНЬ БОЛЬШОЙ файл и я точно знаю, что там будут проблемы с быстродействием, если делать все через TStringList. Короче, средства надо выбирать исходя из задачи
![]() |