Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
ВнизСчитывание строк Найти похожие ветки
← →
funky (2006-11-13 09:58) [0]Привет мастера! Подскажите в чём ошибка.
For i:=0 to resSTR do
begin
readln(CFile,readingstring);
if readingstring[j]="С" then
if readingstring[j+1]="с" then
if readingstring[j+2]="ы" then
Memo2.Lines.Add(IntToStr(i)+",");
end;
Мне нужно проверить, если в считываеммой строчке первые 3 символа "Ссы", тогда добавляем номер строчки в мемо2. Спасибо.
← →
funky (2006-11-13 09:59) [1]P.S. j: byte; равен 0.
← →
Percent (2006-11-13 10:02) [2]1. Что такое resSTR?
2. В момент выполнения этого кода файл CFile гарантированно открыт для чтения?
3. Где проверка длины прочитанной строки (?) readingstring?
Больше вопросов пока нет...
← →
Jeer © (2006-11-13 10:04) [3]1. По файлу так не ходят, есть EOF для этого.
2. А если строка очередная строка имеет длину 0 - чего будет с [j] ?
← →
MBo © (2006-11-13 10:05) [4]Чтение странно выглядит, а для проверки подстроки - Pos используй
← →
funky (2006-11-13 10:07) [5]Percent (13.11.06 10:02) [2]
resSTR, это кол-во строк в файле.
Jeer © (13.11.06 10:04) [3]
>>3. Где проверка длины прочитанной строки (?) readingstring?
>>2. А если строка очередная строка имеет длину 0 - чего будет с [j] ?
блин, недоглядел, наверно действительно там строка пустая, щас проверку добавлю, и поглядим.
MBo © (13.11.06 10:05) [4]
Мне так удобнее %)
← →
funky (2006-11-13 10:14) [6]Стрвнно, код все строчки считывает как пустые =/
procedure TForm1.Button1Click(Sender: TObject);
begin
GetAllStr; //заносим в resSTR общее кол-во строк.
AssignFile(CFile,"X:\Отчёт.txt");
Reset(CFile);
For i:=0 to resSTR do
begin
j:=0;
readln(CFile,readingstring);
If not length(readingstring) = 0 then
begin
if readingstring[j]="С" then
if readingstring[j+1]="с" then
if readingstring[j+2]="ы" then
Memo2.Lines.Add(IntToStr(i)+",");
end;
end;
CloseFile(CFile);
end;
← →
Anatoly Podgoretsky © (2006-11-13 10:17) [7]> funky (13.11.2006 09:58:00) [0]
В приведеном коде не видать цикла по J
Допустим он где то выше, но тогда во внутренний цикл совсем не нужен, по причине бессмысленности
← →
Anatoly Podgoretsky © (2006-11-13 10:18) [8]> Jeer (13.11.2006 10:04:03) [3]
А если имеет длину 10, но J = 15?
← →
funky (2006-11-13 10:23) [9]Anatoly Podgoretsky © (13.11.06 10:18) [8]
ну так j-то обнуляется, каждый раз.
Единственная ф-ция j, это присваивание ему значения от 0 до 2, для считывание символа из строки. Он по определению не может быть равен больше 2х.
Или я что-то неправельно понял =/
Через F7 глянул, прога считает что
If not length(readingstring) = 0 then
всегда равен 0, и перескакивает =/
← →
funky (2006-11-13 10:27) [10]Подумал тут, с while not EOF(CFile) do, проще %)
Но всё равно ошибка остаётся =/
← →
Percent (2006-11-13 10:31) [11]Кхм... используй TStringList
← →
Anatoly Podgoretsky © (2006-11-13 10:33) [12]> funky (13.11.2006 10:23:09) [9]
Я уже нашел присвоение J у тебя, теперь хотелось бы знать, что такое readingstring и почему J=0
← →
funky (2006-11-13 10:42) [13]Percent (13.11.06 10:31) [11]
Те же яйца, но другим ракуром %) Всё равно перескакивает с If not length(readingstring) = 0 then
procedure TForm1.Button1Click(Sender: TObject);
begin
mystr := TStringList.Create;
mystr.LoadFromFile("X:\Îò÷¸ò.txt");
For i := 0 to mystr.Count-1 do
begin
readingstring := mystr.Strings[i];
If not length(readingstring) = 0 then
begin
if readingstring[j]="Ñ" then
if readingstring[j+1]="ñ" then
if readingstring[j+2]="û" then
Memo2.Lines.Add(IntToStr(i)+",");
end;
end;
Anatoly Podgoretsky © (13.11.06 10:33) [12]
readingstring это читаеммая в данный момент строчка, ну обнуляем её(хотя и вправду зачем, мы же ей ничего не присваиваем), что бы читать с 1-го символа.
← →
funky (2006-11-13 10:49) [14]Что-то со мной не то =/
length(readingstring) явно показывает не 0, почему тогда перескакивает =/
Anatoly Podgoretsky © (13.11.06 10:33) [12]
Вы уважаемый для меня человек, но я никак не могу понять, что Вы пытаетесь до меня донести =(
← →
Percent (2006-11-13 10:49) [15]Отладчиком пройдись пошагово.
← →
Percent (2006-11-13 10:50) [16]If not (length(readingstring) = 0) then
← →
funky (2006-11-13 10:58) [17]Percent (13.11.06 10:50) [16]
Балин %)
MBo © (13.11.06 10:05) [4]
нужно было стразу не мудрить, а юзать pos %)
отправлю отчёт, и пойду читать "delFi для чайников."
если кому-то надо...
procedure TForm1.Button1Click(Sender: TObject);
begin
mystr := TStringList.Create;
mystr.LoadFromFile("X:\Отчёт.txt");
For i := 0 to mystr.Count-1 do
begin
readingstring := mystr.Strings[i];
If not (length(readingstring) = 0) then
If (Pos("Page",readingstring)>0) then
Memo2.Lines.Add(IntToStr(i)+",");
end;
← →
funky (2006-11-13 10:58) [18]Пасиб всем =)
← →
Percent (2006-11-13 11:04) [19]отправлю отчёт, и пойду читать "delFi для чайников."
А вот это правильно.
Хотя, можно было бы найти более классическую книгу...
← →
Jeer © (2006-11-13 11:13) [20]
> If not (length(readingstring) = 0) then
Это лишнее.
> readingstring := mystr.Strings[i];
Это - тоже лишнее.
← →
Anatoly Podgoretsky © (2006-11-13 11:20) [21]> funky (13.11.2006 10:49:14) [14]
Чего хочу? Того же что и Бендер, взаимности
Сообщи наконец что такое readingstring
При том не словами, а точное объявление,
о чем сейчас говорить? О неизвестном?
← →
Anatoly Podgoretsky © (2006-11-13 11:21) [22]> Percent (13.11.2006 10:50:16) [16]
> If not (length(readingstring) = 0) then
Ну это конечно бред, зачем тут арифметическое отричание?
Может автор расскажет?
← →
Percent (2006-11-13 11:25) [23]> If not (length(readingstring) = 0) then
зачем тут арифметическое отричание?
Это не арифметическое отрицание.
Это педагогический ход.
Вообще-то...
← →
Anatoly Podgoretsky © (2006-11-13 11:26) [24]> Jeer (13.11.2006 11:13:20) [20]
Ну лишнего там много, начнем с того, что этот кусок кода надо написать с нуля и более правильно.
← →
Jeer © (2006-11-13 11:29) [25]Anatoly Podgoretsky © (13.11.06 11:26) [24]
Сам знаешь, все сразу нельзя рассказывать - может не переварить, подавиться.
> funky (13.11.06 10:58) [17]
> если кому-то надо...
Это так шутят сейчас ?
← →
Плохиш © (2006-11-13 11:31) [26]
> If not (length(readingstring) = 0) then
Надо же какое извращённое мышление 8-O
> If (Pos("Page",readingstring)>0) then
А в начале ветки говорилось о проверке первых символов строки, а теперь в любом месте.
← →
LexXL © (2006-11-13 11:36) [27]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
F: textfile;
s:ansistring;
i:integer;
begin
if OpenDialog1.Execute then
begin
AssignFile(F, OpenDialog1.FileName);
{$I-}
Reset(F);
{$I+}
if IOResult = 0 then
begin
i:=0;
while not Eof(F) do
begin
inc(i);
Readln(F, s);
if (length(s)>2) and ((s[1]="С") and (s[2]="с") and (s[3]="ы"))
then memo1.lines.add(IntToStr(i));
end;
CloseFile(F);
end
else
MessageDlg("Ошибка открытия файла", mtWarning, [mbOk], 0);
end;
end;
end.
← →
Anatoly Podgoretsky © (2006-11-13 12:26) [28]> Percent (13.11.2006 11:25:23) [23]
Педадогический ход, это когда ремнем.
← →
Anatoly Podgoretsky © (2006-11-13 12:27) [29]> Jeer (13.11.2006 11:29:25) [25]
Поэтому я и советую - переписать все нафиг
← →
Anatoly Podgoretsky © (2006-11-13 12:29) [30]> LexXL (13.11.2006 11:36:27) [27]
Уже лучше, теперь бы убрать {$I} и посимвольное сравнение заменить на if Copy(S, 1, 3) = "Ссы" then
← →
LexXL © (2006-11-13 13:09) [31]мона и так
(написал как проверенно и работает)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.041 c