Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перебор символов из текстового файла [XP]


Страницы:   1 2

Петя ©   (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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо