Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

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

 
Петя   (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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.056 c
15-1344643133
wl
2012-08-11 03:58
2013.03.22
творение? потом...


15-1336126916
AV
2012-05-04 14:21
2013.03.22
Можно ли вернуть билет в кинотеатре, т.к. фильм не нравится?


15-1334176202
Юрий
2012-04-12 00:30
2013.03.22
С днем рождения ! 12 апреля 2012 четверг


15-1333225802
Юрий
2012-04-01 00:30
2013.03.22
С днем рождения ! 1 апреля 2012 воскресенье


2-1345262775
0?0
2012-08-18 08:06
2013.03.22
Не ожидать завершения процедуры.