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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.03.2013, 00:35
Ksenya23 Ksenya23 вне форума
Прохожий
 
Регистрация: 16.03.2013
Сообщения: 7
Версия Delphi: Turbo Delphi
Репутация: 10
По умолчанию Заполнение ячеек StringGrid содержимым текстового файла

Здравствуйте, при решении данного задания: 1)Возможность открыть текстовый файл - заполнить ячейки StringGrid-a подстроками, между 2-мя ближними пробелами; 2) из файла и сохранить измененный файл..
__
Возникли трудности, по 1-ой части задания. Подскажите как разрешить проблему? Прилагаю для просмотра исходник решения.
__
Хотелось бы уточнить: вариант с символьным массивом исключен по требованию задания, после заполнения трех столбцов строки, переход заполнения следующей строки.
Вложения
Тип файла: rar StringGrid2.rar (4.3 Кбайт, 9 просмотров)
Ответить с цитированием
  #2  
Старый 17.03.2013, 01:26
Аватар для BBBCat
BBBCat BBBCat вне форума
Новичок
 
Регистрация: 10.03.2013
Сообщения: 73
Репутация: 10
По умолчанию

  1. увеличьте на 1 RowCount и ColCount дабы учесть наличие фиксированных их
  2. RowCount надо считывать с помощью ReadLn, чтобы перейти на следующую строку в файле
  3. поменяйте местами циклы по i и k, надо же сначала считывать строки, а потом разбирать их на элементы колонок
  4. переставьте Readln(f, strTemp) выше, ведь строку надо сначала считать, а потом разбирать
  5. ищИте пробелы в строках(вы ничего не ищите, пробелы не стоят)
  6. ваши циклы по i и k фактически не работают; вы проходите весь файл сразу в while, поэтому можно, например, заменить while на конструкцию if Eof(F) then Break
  7. в самом теле цикла наворочено лишнего; уберите strTemp1 и strTemp2; нужно выделять подстроку, напрямую присваивать её ячейке и удалять из считанной строки с помощью Delete, тогда не будет у вас ни символьного массива, ни перехода, после заполнения трех столбцов строки, на следующую строку
  8. у TStringList(проперть Rows у TStringGrid) имеется такая вещь DelimitedText; ознакомьтесь, вдруг поможет
  9. отформатируйте текст нормально, непонятно какой end - откуда; вам же будет легче в программе разбираться
А по 1-ой части задания у вас трудности не возникли... Зря вы так считаете. У вас там не сохраняется размерность массива, и все значения пишутся с новой строки, а не построчно. Фиксированные + лишние строка и столбец пишутся кстати(вернее некстати ) тоже, т.е. подкорректируйте пераметры цикла.

Последний раз редактировалось BBBCat, 17.03.2013 в 07:42.
Ответить с цитированием
  #3  
Старый 17.03.2013, 15:37
Ksenya23 Ksenya23 вне форума
Прохожий
 
Регистрация: 16.03.2013
Сообщения: 7
Версия Delphi: Turbo Delphi
Репутация: 10
По умолчанию

Следуя вашим рекомендациям, получилось следующее..(наверно все-таки следует оставить одну переменную), все правильно поняла из ваших подсказок?
Вложения
Тип файла: rar StringGrid2.rar (214.2 Кбайт, 11 просмотров)
Ответить с цитированием
  #4  
Старый 17.03.2013, 17:23
Аватар для BBBCat
BBBCat BBBCat вне форума
Новичок
 
Регистрация: 10.03.2013
Сообщения: 73
Репутация: 10
По умолчанию

Верно, одну строковую переменную надо было оставить, тут всё правильно. Но:
  1. не сделали
  2. есть
  3. есть
  4. не сделали
  5. не сделали (где пробелы???)
  6. так, но if Eof(F) then Break тоже выше надо
  7. так, но такая белиберда с pos, delete и copy, что естественно тут ошибки
  8. читать вы не хотите, а не представляете, насколько сильно это облегчило б вам жизнь(практически до одной строчки)
  9. тоже нет
Pos(Substr: string; S: string) - даёт позицию первой строки во второй. Т.е. I:=Pos('е', 'легко') сделает I равным 2
Delete(var S: string; Index, Count:Integer) - процедура, а не функция, слева ничего не надо писать. Удаляет Count символов(букв или цифр) у строки S начиная с позиции под номером Index. Если S:='легко';, то Delete(S, 3, 2) сделает S равным 'лео'
Copy(S; Index, Count: Integer) возвращает часть строки, опять же Count символов начиная с позиции Index. Получаем S:=Copy('легко', 3, 3) сделает S равным 'гко'.
А вообще - читайте документацию.

Последний раз редактировалось BBBCat, 17.03.2013 в 18:02.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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