Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.044 c
2-1163778807
Jzero
2006-11-17 18:53
2006.12.03
Поиск папки


2-1163273365
(_)
2006-11-11 22:29
2006.12.03
Проект.


3-1159422895
vodvorezlaya
2006-09-28 09:54
2006.12.03
Где хранится список всех компонентов TDataSource на форме


15-1163274646
cerber
2006-11-11 22:50
2006.12.03
Как заставить программу работать с HTML help


2-1163346433
Stan
2006-11-12 18:47
2006.12.03
Published свойство





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский