![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перебор символов из текстового файла [XP]
Петя © (2012-09-01 16:17:00)Здравствуйте!
Накропал вот такой код.
procedure TForm1.Button1Click(Sender: TObject);
var
SL: TStringList;
I1, I2: Cardinal;
begin
if (OpenDialog1.Execute(Form1.Handle) = False) then Exit;
SL := TStringList.Create;
SL.LoadFromFile(OpenDialog1.FileName);
for I1 := 0 to SL.Count - 1 do
for I2 := 1 to Length(SL.Strings[I1]) do
if (SL.Strings[I1][I2] in ['а'..'я'] + ['А'..'Я'] + ['ё'] + ['Ё']) then
ShowMessage('Строка ' + IntToStr(I1) + ', символ ' + IntToStr(I2));
SL.Free;
end;
В идеале код должен функционировать так: в StringList загружается текстовый файл, а программа построчно, побуквенно должна перебирать символы на наличие русских букв и, если таковые обнаружатся, сообщить об этом пользователю.
Не знаю, в чём проблема, но код нерабочий. Программа не уведомляет пользователя, если в тексте содержатся русские буквы.
Петя (2012-09-05 17:32:00) [1]
> QAZ (04.09.12 20:10) [13]
> зачем человеку, не студенту, давно забившему на прогинг, решать такие идиотские, бесполезные для общества задачи?
Не для общества, а для себя. Так что можете быть спокойны за ваши спутники и Венеру.
> palva © (04.09.12 19:13) [12]
Спасибо за код! Теперь всё работает.
Anatoly Podgoretsky (2012-09-05 12:30:00) [2]Удалено модератором
Anatoly Podgoretsky (2012-09-05 12:30:00) [3]> Давайте будем жрать! (05.09.2012 11:16:19) [19]
Ну и хорошо, руки не будет распускать.
Inovet (2012-09-05 11:55:00) [4]> [19] Давайте будем жрать! (05.09.12 11:16)
> у ней и так руки отбиты...
Главное другие части не разбить.
Давайте будем жрать! (2012-09-05 11:16:00) [5]у ней и так руки отбиты...
Anatoly Podgoretsky (2012-09-05 11:09:00) [6]> Давайте будем жрать! (05.09.2012 11:01:17) [17]
Пролетит мимо, Венеру повредит.
Давайте будем жрать! (2012-09-05 11:01:00) [7]
> ...а потом спутники недолетають до небесной твреди и падають.
> ..
почти у самого края земного диска
Palladin (2012-09-05 09:27:00) [8]...а потом спутники недолетають до небесной твреди и падають...
asail (2012-09-04 23:24:00) [9]
> QAZ (04.09.12 20:10) [13]
> зачем человеку,не студенту, давно забившему на прогинг,
> решать такие идиотские , бесполезные для общества задачи?
А ты предлагаешь, чтобы "не студент, давно забивший на прогинг" решал таки полезные для общества задачи? Не боисси последствий для этого самого общества? :)
Сергей М. (2012-09-04 20:47:00) [10]
> QAZ (04.09.12 20:10) [13]
Один из распространенных вариантов - "гнилые понты".
Типо попросила "одназнакомая", отвесив "комплимент", мол, ты же типо программист)))
QAZ (2012-09-04 20:10:00) [11]
> Я уже несколько лет не занимался программированием.
зачем человеку,не студенту, давно забившему на прогинг, решать такие идиотские , бесполезные для общества задачи?
palva (2012-09-04 19:13:00) [12]Вы получаете из стринглиста широкие символы, а сравниваете с символами ansi. Вот так можно поправить:
var
s: AnsiString;
.....
for I1 := 0 to SL.Count - 1 do
begin
s := SL.Strings[I1];
for I2 := 1 to Length(s) do
if (s[I2] in ['а'..'я'] + ['А'..'Я'] + ['ё'] + ['Ё']) then
ShowMessage('Строка ' + IntToStr(I1) + ', символ ' + IntToStr(I2))
end;
Dimka Maslov (2012-09-02 09:39:00) [13]
> Зачем кушать память? Ведь нужна только обработка.
Памяти не катастрофически не хватает? К тому же TStringList автоматически поддерживает любой формат юникодов, TFileStream - нет. Надо сначала считать преамбулу, потом на её основании производить чтения данных, преообразование в нужную кодировку, а ещё искать разделители строк, которые бывают разными...
Алибабай (2012-09-02 09:34:00) [14]
> turbouser © (01.09.12 21:26) [9]
>
>
> > Anatoly Podgoretsky © (01.09.12 20:52) [8]
> >
> > Неучи
>
> Всяко бывает, не надо так сразу :))
Нет смысла объяснять Толе, он все равно не поймет, у него генетическая память предков, он гоа'улд.
turbouser (2012-09-01 21:26:00) [15]
> Anatoly Podgoretsky © (01.09.12 20:52) [8]
>
> Неучи
Всяко бывает, не надо так сразу :))
Anatoly Podgoretsky (2012-09-01 20:52:00) [16]Неучи
turbouser (2012-09-01 20:36:00) [17]
> Германн ©
Студенты, Сэр
Германн (2012-09-01 20:04:00) [18]А переменные цикла опять Cardinal
(((
turbouser (2012-09-01 18:41:00) [19]
> Dimka Maslov © (01.09.12 18:38) [4]
> В чём есть неправильность загрузки текстового файла через
> TStringList.LoadFromFile?
Зачем кушать память? Ведь нужна только обработка.
Dimka Maslov (2012-09-01 18:38:00) [20]
> уже неправильно
В чём есть неправильность загрузки текстового файла через TStringList.LoadFromFile? Всё время так делаю и никогда не встречал никаких проблем. Другое дело, что с переходом на юникод множества с русскими буквами перестают работать правильно, ибо русские буквы теперь прочно закрепляются на задворках таблицы, множества же могут содержать лишь #0..#255. Следовательно теперь можно делать только так:
function IsCharRussian(Ch: Char): Boolean;
begin
Ch := AnsiLowerChar(Ch)[1];
Result := (Ch > 'a') and (Ch < 'я') or (Ch = 'ё');
end;