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

Вниз

Считывание строк   Найти похожие ветки 

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

Наверх




Память: 0.54 MB
Время: 0.052 c
15-1163485995
alex_drob
2006-11-14 09:33
2006.12.03
Лицензионный WinXP и новый HDD


15-1163543329
Германн
2006-11-15 01:28
2006.12.03
Интернет в Москве


4-1153410020
Alek_1
2006-07-20 19:40
2006.12.03
Как программно включить ActiveDesktop?


2-1163498941
Димыч
2006-11-14 13:09
2006.12.03
Динамическое создание объектов


2-1163597749
КлЯкСа
2006-11-15 16:35
2006.12.03
Как закрыть список DBLookupCombo?