Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Перебор символов из текстового файла   Найти похожие ветки 

 
Петя   (2012-09-01 16:17) [0]

Здравствуйте!

Накропал вот такой код.

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 загружается текстовый файл, а программа построчно, побуквенно должна перебирать символы на наличие русских букв и, если таковые обнаружатся, сообщить об этом пользователю.

Не знаю, в чём проблема, но код нерабочий. Программа не уведомляет пользователя, если в тексте содержатся русские буквы.


 
turbouser ©   (2012-09-01 16:26) [1]


> StringList загружается текстовый фай

уже неправильно

> (SL.Strings[I1][I2] in ["а".."я"] + ["А".."Я"] + ["ё"] +
> ["Ё"])

if (SL.Strings[I1][I2] in ["а".."я"]) or (SL.Strings[I1][I2] in ["А".."Я"]  ) then fail
студент?


 
Петя   (2012-09-01 16:33) [2]


> > StringList загружается текстовый фай
>
> уже неправильно


А как посоветуете?


> студент?


Бывший, окончил только колледж. Я уже несколько лет не занимался программированием.


 
turbouser ©   (2012-09-01 16:53) [3]


> Петя   (01.09.12 16:33) [2]


> А как посоветуете?
>

TfileSteram

> Бывший, окончил только колледж

учиться, учиться и еще раз этсамое


 
Dimka Maslov ©   (2012-09-01 18:38) [4]


> уже неправильно


В чём есть неправильность загрузки текстового файла через TStringList.LoadFromFile? Всё время так делаю и никогда не встречал никаких проблем. Другое дело, что с переходом на юникод множества с русскими буквами перестают работать правильно, ибо русские буквы теперь прочно закрепляются на задворках таблицы, множества же могут содержать лишь #0..#255. Следовательно теперь можно делать только так:

function IsCharRussian(Ch: Char): Boolean;
begin
 Ch := AnsiLowerChar(Ch)[1];
 Result := (Ch > "a") and (Ch < "я") or (Ch = "ё");
end;


 
turbouser ©   (2012-09-01 18:41) [5]


> Dimka Maslov ©   (01.09.12 18:38) [4]


> В чём есть неправильность загрузки текстового файла через
> TStringList.LoadFromFile?

Зачем кушать память? Ведь нужна только обработка.


 
Германн ©   (2012-09-01 20:04) [6]

А переменные цикла опять Cardinal
(((


 
turbouser ©   (2012-09-01 20:36) [7]


> Германн ©

Студенты, Сэр


 
Anatoly Podgoretsky ©   (2012-09-01 20:52) [8]

Неучи


 
turbouser ©   (2012-09-01 21:26) [9]


>  Anatoly Podgoretsky ©   (01.09.12 20:52) [8]
>
> Неучи

Всяко бывает, не надо так сразу :))


 
Алибабай   (2012-09-02 09:34) [10]


> turbouser ©   (01.09.12 21:26) [9]
>
>
> >  Anatoly Podgoretsky ©   (01.09.12 20:52) [8]
> >
> > Неучи
>
> Всяко бывает, не надо так сразу :))


Нет смысла объяснять Толе, он все равно не поймет, у него генетическая память предков, он гоа"улд.


 
Dimka Maslov ©   (2012-09-02 09:39) [11]


> Зачем кушать память? Ведь нужна только обработка.


Памяти не катастрофически не хватает? К тому же TStringList автоматически поддерживает любой формат юникодов, TFileStream - нет. Надо сначала считать преамбулу, потом на её основании производить чтения данных, преообразование в нужную кодировку, а ещё искать разделители строк, которые бывают разными...


 
palva ©   (2012-09-04 19:13) [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;


 
QAZ   (2012-09-04 20:10) [13]


> Я уже несколько лет не занимался программированием.

зачем человеку,не студенту, давно забившему на прогинг, решать такие идиотские , бесполезные для общества задачи?


 
Сергей М. ©   (2012-09-04 20:47) [14]


> QAZ   (04.09.12 20:10) [13]


Один из распространенных вариантов - "гнилые понты".
Типо попросила "одназнакомая", отвесив "комплимент", мол, ты же типо программист)))


 
asail ©   (2012-09-04 23:24) [15]


> QAZ   (04.09.12 20:10) [13]

> зачем человеку,не студенту, давно забившему на прогинг,
> решать такие идиотские , бесполезные для общества задачи?

А ты предлагаешь, чтобы "не студент, давно забивший на прогинг" решал таки полезные для общества задачи? Не боисси последствий для этого самого общества? :)


 
Palladin ©   (2012-09-05 09:27) [16]

...а потом спутники недолетають до небесной твреди и падають...


 
Давайте будем жрать!   (2012-09-05 11:01) [17]


> ...а потом спутники недолетають до небесной твреди и падають.
> ..
почти у самого края земного диска


 
Anatoly Podgoretsky ©   (2012-09-05 11:09) [18]

> Давайте будем жрать!  (05.09.2012 11:01:17)  [17]

Пролетит мимо, Венеру повредит.


 
Давайте будем жрать!   (2012-09-05 11:16) [19]

у ней и так руки отбиты...


 
Inovet ©   (2012-09-05 11:55) [20]

> [19] Давайте будем жрать!   (05.09.12 11:16)
> у ней и так руки отбиты...

Главное другие части не разбить.


 
Anatoly Podgoretsky ©   (2012-09-05 12:30) [21]

> Давайте будем жрать!  (05.09.2012 11:16:19)  [19]

Ну и хорошо, руки не будет распускать.


 
Anatoly Podgoretsky ©   (2012-09-05 12:30) [22]

Удалено модератором


 
Петя   (2012-09-05 17:32) [23]


> QAZ   (04.09.12 20:10) [13]
> зачем человеку, не студенту, давно забившему на прогинг, решать такие идиотские, бесполезные для общества задачи?


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


> palva ©   (04.09.12 19:13) [12]


Спасибо за код! Теперь всё работает.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.063 c
1-1298375588
юрий_карлик
2011-02-22 14:53
2013.03.22
компонент TChart, как скрыть конкретные точки в графике


15-1338542114
NailMan
2012-06-01 13:15
2013.03.22
восстановление после операции


2-1341839644
well
2012-07-09 17:14
2013.03.22
Код раскладки - Английский США-международная


15-1352665803
Юрий
2012-11-12 00:30
2013.03.22
С днем рождения ! 12 ноября 2012 понедельник


15-1330443309
pasha_golub
2012-02-28 19:35
2013.03.22
IPC в MacOS&amp;Win средствами Delphi XE2





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский