Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2009, 11:23   #1
MixanMM
Форумчанин
 
Регистрация: 09.06.2009
Сообщений: 151
По умолчанию программа нахождения и проверки символов/строк

ребят, извините что достал, но больше не могу, пытался сам, но не получаеться , помогите доделать программу, смысл такой, открывается файл, в нем куча текста, втексте присутствует такой символ после каждого заполненного поля в другой программе "|", после этого символа я разнес построчно весь текст, нужно сделать чтобы
1.открылся файл, в нем вытянуть номер заявки(2ая строка), дату(3я строка), счет(60ая строка), и еще кор счет(24ая строка)
2.в 60ой строке удалить пробелы и первые 20 символов сравнить со строкой номер 24.(сделал)
3.самое сложное. из компонента Тмемо1 загрузить в еомпонент ТМемо2 только 2,3,24,60 строк, кст пункт второй можно выполнить и тут, но проблема в том что в одном текстовом файле может быть как 2-3 платежки, так и штук 500, каждая платежка начинаеться с символов ZR, т.е получаеться после каждой ZR нужно 2,3,24,60 смотреть сравнивать, ну ит.д.(это я и самм сделаю) а вот как работать с файлом по признаку ZR ума не приложу, всем буду благодарен за подсказки/советы.
Листинг программы :
Код:
var
Form1: TForm1;
f1 : textFile;
date,no, s,c, str, stroka61: string;
i,z: integer;
implementation

{$R *.dfm}

procedure Tform1.doit();
Begin
Repeat
Begin
For z:=0 To Memo1.Lines.Count Do
If Pos('ZR',Memo1.Lines.Strings[z])>0 Then
Begin
Memo2.Lines.Add(Memo1.Lines.Strings[0]);
Memo2.Lines.Add(Memo1.Lines.Strings[1]);
{Memo2.Lines.Add(Memo1.Lines.String s[24]);
Memo2.Lines.Add(Memo1.Lines.Strings[59]);
{Memo1.Lines.Delete(z);}
End
Else
Memo1.Lines.Delete(20);
End;
Until Memo1.Lines.Count = 1 ;
stroka61:=memo2.lines[61];
s:=memo2.Lines[2];
{while pos(' ',s)>0 do
delete(s,pos(' ',s),1);
if s=stroka61 then showmessage('ñîâïàëà')
else ShowMessage ('Íåò')}
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if Open.Execute
then from.Text :=Open.FileName
else exit;
Memo1.lines.loadfromfile(from.text) ;
s:=Memo1.Text;
for i:=1 to length(s) do
begin
if s[i]='|' then c:=c+#13 else c:=c+s[i];
end;
if c<>'' then
begin
Memo1.Clear;
memo1.Lines.text:=c;
end;
memo1.Lines.Delete(0);
memo1.Lines.Delete(0);
memo1.Lines.Delete(0);
memo1.Lines.Delete(0);
memo1.Lines.Delete(0);
memo1.Lines.Delete(0);
memo1.Lines.Delete(0);
memo1.Lines.Delete(0);
memo1.Lines.Delete(0);
memo1.Lines.Delete(0);
memo1.Lines.Delete(0);
memo1.Lines.Delete(0);
memo1.Lines.Delete(0);
memo1.Lines.Delete(0);
memo1.Lines.Delete(0);

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
doit;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Memo2.clear;
Memo1.clear;
end;

end.
вообщем вкладываю файлы платежек, и принт скрин в нем описано что-где, воопще задача такая, счета сравнить, если не совпадают, то вывести на экран номер платежки и дату, (я там выделил), платежки в одном файле начинаються с ZR символа, (выделил), воопщем такая несложная(на первый взгяляд проблеммка) спасибо зарнее
Вложения
Тип файла: rar Рабочий стол.rar (92.6 Кб, 14 просмотров)

Последний раз редактировалось Stilet; 06.07.2009 в 08:33.
MixanMM вне форума Ответить с цитированием
Старый 03.07.2009, 16:33   #2
lexaltd
Форумчанин
 
Регистрация: 21.07.2008
Сообщений: 192
По умолчанию

Писал на скорую руку можеш переделать (так что прошу не надо говорить что автор не то просил , там много вопросов , самый главный был про 'ZR'), в мемо1 загружается твой файл (только тебе надо подкорективовать чтоб по строком разбивалось нормальмно) , потом в Мемо2 разбивается на платёжки по отдельности , а Мемо3 переносятся твои сроки там(2,3,24,60) у меня столько не получилось , но ты в своих платёжках лучше разбираешся

Код:
procedure TForm1.FormShow(Sender: TObject);
begin
 Memo1.Clear;
 Memo1.Lines.LoadFromFile('02750200.ZR7');
 Memo1.Text := AnsiReplaceStr(Memo1.Text, '||', #13#10);
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var
 s , s2 :string;
 i,i2,i3 : Integer;
begin
  Memo2.Clear;
  Memo3.Clear;
  i := 1;
  s := Memo1.Text;
  while i > 0 do
  begin
    i := AnsiPos('ZR', s);
    i2 := PosEx ('ZR', s,i +2);
    if i <> 0 then
     begin
       if (i <> 0) and (i2 = 0) then
         i2 := Length(s);
       s2 := Copy(s,i, i2 -i);
       Delete(s,1, i2 -1);
       ST := TStringList.Create;
       ST.Text := s2;

       for i3 := 0  to ST.Count -1 do
        begin
          Memo2.Lines.Add(ST.Strings[i3]);
        end;
       Memo2.Lines.Add(' ---------------------------- ');

       try
         Memo3.Lines.Add(ST.Strings[0]);//переносятся твои сроки там(2,3,24,60)  
         Memo3.Lines.Add(ST.Strings[1]);
        // Memo3.Lines.Add(ST.Strings[4]);
         //Memo3.Lines.Add(ST.Strings[5]);
       except

       end;

       Memo3.Lines.Add(' --------------------------- ');
     end;
  end;

end;

Последний раз редактировалось lexaltd; 03.07.2009 в 16:46.
lexaltd вне форума Ответить с цитированием
Старый 06.07.2009, 06:08   #3
MixanMM
Форумчанин
 
Регистрация: 09.06.2009
Сообщений: 151
По умолчанию

Цитата:
Сообщение от lexaltd Посмотреть сообщение
Код:
    i2 := PosEx ('ZR', s,i +2);
спасибо за код, но к сожалению эта функция в моем делфи не работает,( уменя Делфи 7), возможна ли альтернатива этой функции?
MixanMM вне форума Ответить с цитированием
Старый 06.07.2009, 09:15   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от MixanMM Посмотреть сообщение
ребят, извините что достал, но больше не могу, пытался сам, но не получаеться , помогите доделать программу, смысл такой, открывается файл, в нем куча текста, втексте присутствует такой символ после каждого заполненного поля в другой программе "|", после этого символа я разнес построчно весь текст, нужно сделать чтобы
1.открылся файл, в нем вытянуть номер заявки(2ая строка), дату(3я строка), счет(60ая строка), и еще кор счет(24ая строка)
2.в 60ой строке удалить пробелы и первые 20 символов сравнить со строкой номер 24.(сделал)
3.самое сложное. из компонента Тмемо1 загрузить в еомпонент ТМемо2 только 2,3,24,60 строк, кст пункт второй можно выполнить и тут, но проблема в том что в одном текстовом файле может быть как 2-3 платежки, так и штук 500, каждая платежка начинаеться с символов ZR, т.е получаеться после каждой ZR нужно 2,3,24,60 смотреть сравнивать, ну ит.д.(это я и самм сделаю) а вот как работать с файлом по признаку ZR ума не приложу, всем буду благодарен за подсказки/советы.
Вы случайно не для СЭД хотите формировать данные?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 06.07.2009, 11:29   #5
MixanMM
Форумчанин
 
Регистрация: 09.06.2009
Сообщений: 151
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Вы случайно не для СЭД хотите формировать данные?
да! поможешь?
MixanMM вне форума Ответить с цитированием
Старый 06.07.2009, 11:49   #6
lexaltd
Форумчанин
 
Регистрация: 21.07.2008
Сообщений: 192
По умолчанию

Цитата:
Сообщение от MixanMM Посмотреть сообщение
спасибо за код, но к сожалению эта функция в моем делфи не работает,( уменя Делфи 7), возможна ли альтернатива этой функции?
Добавь в uses StrUtils , у меня тоже Делфи 7
lexaltd вне форума Ответить с цитированием
Старый 06.07.2009, 12:48   #7
MixanMM
Форумчанин
 
Регистрация: 09.06.2009
Сообщений: 151
По умолчанию

Unit1.pas(54): Incompatible types: 'String' and 'TStringList'
счя тут ругается
MixanMM вне форума Ответить с цитированием
Старый 06.07.2009, 13:29   #8
lexaltd
Форумчанин
 
Регистрация: 21.07.2008
Сообщений: 192
По умолчанию

Вот весь код

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, StrUtils;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    BitBtn1: TBitBtn;
    Memo1: TMemo;
    BitBtn2: TBitBtn;
    Memo2: TMemo;
    Memo3: TMemo;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  ST : TStringList;
implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 Edit1.Text := AnsiReplaceStr(Edit1.Text, ' ', '');
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var
 s , s2 :string;
 i,i2,i3 : Integer;
begin
  Memo2.Clear;
  Memo3.Clear;
  i := 1;
  s := Memo1.Text;
  while i > 0 do
  begin
    i := AnsiPos('ZR', s);
    i2 := PosEx ('ZR', s,i +2);
   // ShowMessage(IntToStr(i) +' '+ IntToStr(i2));
    if i <> 0 then
     begin
       if (i <> 0) and (i2 = 0) then
         i2 := Length(s);
       s2 := Copy(s,i, i2 -i);
     // ShowMessage( s2);
       Delete(s,1, i2 -1);
       ST := TStringList.Create;
       ST.Text := s2;

       for i3 := 0  to ST.Count -1 do
        begin
          Memo2.Lines.Add(ST.Strings[i3]);
        end;
       Memo2.Lines.Add(' ---------------------------- ');

       try
         Memo3.Lines.Add(ST.Strings[0]);
         Memo3.Lines.Add(ST.Strings[1]);
        // Memo3.Lines.Add(ST.Strings[4]);
         //Memo3.Lines.Add(ST.Strings[5]);
       except

       end;

       Memo3.Lines.Add(' --------------------------- ');
     end;
  end;

end;

procedure TForm1.FormShow(Sender: TObject);
begin
 Memo1.Clear;
 Memo1.Lines.LoadFromFile('02750200.ZR7');
 Memo1.Text := AnsiReplaceStr(Memo1.Text, '||', #13#10);
end;

end.
lexaltd вне форума Ответить с цитированием
Старый 06.07.2009, 13:59   #9
MixanMM
Форумчанин
 
Регистрация: 09.06.2009
Сообщений: 151
По умолчанию

все равно при компиляции ругаеться вот такой строкой nit1.pas(54): Incompatible types: 'String' and 'TStringList'
MixanMM вне форума Ответить с цитированием
Старый 06.07.2009, 14:16   #10
lexaltd
Форумчанин
 
Регистрация: 21.07.2008
Сообщений: 192
По умолчанию

Цитата:
Сообщение от MixanMM Посмотреть сообщение
все равно при компиляции ругаеться вот такой строкой nit1.pas(54): Incompatible types: 'String' and 'TStringList'
Ну так покажи что у тебя находится в этой строке
lexaltd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа нахождения последовательностей Влад-mego Общие вопросы C/C++ 4 21.12.2008 22:40
Программа нахождения дубликатов MP3 mutabor Софт 4 20.10.2008 20:36
Определение количество символов в строке, и самих строк. Патрон Общие вопросы Delphi 10 01.04.2008 12:43
Обработка строк символов Wilda Паскаль, Turbo Pascal, PascalABC.NET 3 12.12.2007 18:54