Форум: "Начинающим";
Текущий архив: 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.07 c