![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
KljaGGsa |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
Если есть текстовый файл Т.txt , в тексте которого содержится несколько трехзначных чисел, как должна выглядеть процедура, с помощью которой можно было бы найти максимальное число и присвоить его целочисленной переменной i ?
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Что кроме чисел есть в файле, и чем отделяются слова/числа друг от друга?
|
KljaGGsa |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
Вот образец содержимого файла:
001 фрагмент текста 1 002 фрагмент текста 2 003 фрагмент текста 3 004 фрагмент текста 4 . . . . . . . . . . . . Трехзначные числа назовем метками и нужно элементарно определить количество меток и соответственно фрагментов текста. Длина фрагмента может превышать 255 символов Сообщение отредактировано: KljaGGsa - 6.07.2009 11:32 |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата и нужно элементарно определить количество меток и соответственно фрагментов текста. Общее количество строк в файле...var sL: TStringList;..., а если его поделить на 2 - получишь количество фрагментов текста. Естественно, если внутри фрагмента может быть перевод строки, то придется чуть-чуть изменить алгоритм: sL := TStringList.Create; // Создаем СтрингЛист Сообщение отредактировано: volvo - 6.07.2009 15:06 |
KljaGGsa |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
Вот на эту строчку:
if TryStrToInt(sL.Strings[i], value) Then Inc(cnt); компилятор выводит сообщение: [Error] Unit1.pas(60): Undeclared identifier: 'value' |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Ну, так переменную Value типа Integer надо описать... И cnt тоже.
|
KljaGGsa |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
Владимир, а можно Вас попросить добавить комментарии в код, чтобы было понятнее как оно работает
|
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Комментарии добавлены...
|
KljaGGsa |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
Так хотелось бы с вашей помощью эти комментарии причесать, а то половина из них выражает непонимание)))
А еще вопрос - в процедуре скажем Button1Click могут быть несколько последовательных фрагментов кода, заключенных в слова begin и end? |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
KljaGGsa, я имел в виду, что я в свой код, выше (в сообщении №4), добавил комментарии...
Цитата в процедуре скажем Button1Click могут быть несколько последовательных фрагментов кода, заключенных в слова begin и end Могут, только если они находятся внутри блока begin/end самой процедуры.procedure TForm1.Button1Click; |
KljaGGsa |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
Есть целочисленная переменная r, значение которой произвольно соответствует одному из промежуточных значений переменной cnt, и переменная sL2 типа TStringList.
Как теперь присвоить переменной sL2 содержимое фрагмента текста файла Т.txt с условным номером r? Сообщение отредактировано: KljaGGsa - 6.07.2009 16:00 |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Смотри:
procedure TForm1.Button2Click(Sender: TObject);Переменная P должна содержать номер фрагмента, который ищется. Единственное, о чем ты должна позаботиться - это о том, что такой фрагмент действительно есть, P не должно быть больше числа фрагментов в файле. Мой код не проверяет этот случай. Хочешь - дописывай проверку сама, я этого делать не буду. |
KljaGGsa |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Женский Репутация: ![]() ![]() ![]() |
Ну да, мы изначально условились, что r входит в диапазон значений cnt, то есть такой проблемы возникнуть не должно... Пасибки!
![]() |
youngDelphyGirl |
![]()
Сообщение
#14
|
Группа: Пользователи Сообщений: 6 Пол: Женский Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
А если мы даже приблизительно не знаем, сколько фрагментов содержится в тексте? Или это количество фрагментов постоянно меняется? Как тогда быть?? А нам и не надо знать, сколько фрагментов в тексте. Нам надо знать, какой фрагмент мы ищем (по крайней мере в той задаче, которая была поставлена изначально). Если у тебя другая задача - задавай свой вопрос отдельно, формулируй ее, посмотрим, что можно сделать. |
youngDelphyGirl |
![]()
Сообщение
#16
|
Группа: Пользователи Сообщений: 6 Пол: Женский Репутация: ![]() ![]() ![]() |
А нам и не надо знать, сколько фрагментов в тексте. Нам надо знать, какой фрагмент мы ищем (по крайней мере в той задаче, которая была поставлена изначально). Если у тебя другая задача - задавай свой вопрос отдельно, формулируй ее, посмотрим, что можно сделать. А "задать вопрос отдельно" - можно здесь? Вопрос похожий - разместить в файле фрагменты различного объема, в некоторых случаях более 255 символов. Сделать так, чтобы их можно было пересчитать и выбрать какой-либо один функцией random и вывести его в Memo1. Также предусмотреть возможность добавить или удалить фрагмент. Так как предусматривается возможность удаления фрагментов, по видимому присваивать им порядковые номера было бы неправильно, иначе пришлось бы заново нумеровать все фрагменты после одного удаленного. По видимому, нужно разделить фрагменты определенным символом и после переноса содержимого файла в переменную типа TStrings или TStringList подсчитать общее число этих символов, а потом оперировать этим числом? А при добавлении из Memo2 очередного фрагмента, добавлять и этот символ, чтобы добавленный фрагмент вписался в общую картину ![]() Пока что собственного опыта для корректного написания кода несколько не хватает, поэтому позволю себе нескромно обратиться за помощью к специалистам)))) ![]() |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
В принципе, не вижу проблем, чтоб хранить в файле строки длиной больше 255 символов. Длина строки AnsiString (или WideString) может достигать 2Гб. Тогда StringList.Count выдаст число строк, и не надо ничего искать.
Единственное, на что надо обратить внимание при чтении из этого файла в StringList: разбивается содержимое файла построчно и по тому символу, который задан в DelimiterChar, то есть, перед сохранением Memo->File надо все сочетания #13#10 заменить на какой-нибудь особый символ или последовательность (StringReplace подходит для этого как нельзя лучше), а потом, когда нужный фрагмент в StringList-е уже найден, заменить эту последовательность назад на #13#10. Добавлено через 2 мин. P.S. Викторину какую-то пишешь что-ли? Может, выгоднее засунуть вопросы в БД (скажем, MSAccess)? Чем больше будет вопросов - тем выгоднее будет решение с Базой Данных. Мало ли, вдруг захочется еще и вопросы с изображениями включить... ![]() |
youngDelphyGirl |
![]()
Сообщение
#18
|
Группа: Пользователи Сообщений: 6 Пол: Женский Репутация: ![]() ![]() ![]() |
Единственное, на что надо обратить внимание при чтении из этого файла в StringList: разбивается содержимое файла построчно и по тому символу, который задан в DelimiterChar, то есть, перед сохранением Memo->File надо все сочетания #13#10 заменить на какой-нибудь особый символ или последовательность (StringReplace подходит для этого как нельзя лучше), а потом, когда нужный фрагмент в StringList-е уже найден, заменить эту последовательность назад на #13#10. Как превратить эти светлые соображения в код, пока что представляю очень неясно . . . ![]() P.S. Викторину какую-то пишешь что-ли? Может, выгоднее засунуть вопросы в БД (скажем, MSAccess)? Чем больше будет вопросов - тем выгоднее будет решение с Базой Данных. Мало ли, вдруг захочется еще и вопросы с изображениями включить... ![]() Нет, о викторинах и публичной работе речи нет, это должна быть простая запоминалка для личного пользования ![]() Сообщение отредактировано: youngDelphyGirl - 6.08.2009 14:17 |
volvo |
![]()
Сообщение
#19
|
Гость ![]() |
Цитата Как превратить эти светлые соображения в код Очень просто...На форме - Мемо, и две кнопки, одна для сохранения в файл текущего содержимого Memo, а вторая - для занесения в Memo случайного фрагмента из файла. Плюс к этому - TSaveDialog + TOpenDialog для задания имен файлов: unit Unit1;Если что непонятно - спрашивай... |
youngDelphyGirl |
![]()
Сообщение
#20
|
Группа: Пользователи Сообщений: 6 Пол: Женский Репутация: ![]() ![]() ![]() |
Спасибо, сейчас начну писать построчные комментарии, чтобы детально разобраться ))
|
![]() ![]() |
![]() |
Текстовая версия | 13.07.2025 1:45 |