Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выборка данных из файла [D7, XP]


n_sch ©   (2012-09-21 18:41:00) 

Добрый день. Подскажите пожалуйста, как выбрать данные из файла и запихнуть их в memo.Есть файл примерно такого содержания:
                     <Сотрудник Нпп="1">
  <Фамилия>Иванов</Фамилия>
  <Имя>Анатолий</Имя>
  <Отчество>Сергеевич</Отчество>
<ФилиалОтделенияБанка>0062</ФилиалОтделенияБанка>
  <Сумма>100.78</Сумма>
 </Сотрудник>
 <Сотрудник Нпп="2">
  <Фамилия>Сидорова</Фамилия>
  <Имя>Светлана</Имя>
  <Отчество>Геннадьевна</Отчество>
<ФилиалОтделенияБанка>0062</ФилиалОтделенияБанка>
  <Сумма>200.48</Сумма>
 </Сотрудник>
 <Сотрудник Нпп="3">
  <Фамилия>Петров</Фамилия>
  <Имя>Андрей</Имя>
  <Отчество>Валерьевич</Отчество>
<ФилиалОтделенияБанка>0062</ФилиалОтделенияБанка>
  <Сумма>300.04</Сумма>
 </Сотрудник>

надо что бы в memo было так:
Иванов;Анатолий;Сергеевич;100.78
Сидорова;Светлана;Геннадьевна;200.48
Петров;Андрей;Валерьевич;300.04

открываю файл

procedure TForm1.Button3Click(Sender: TObject);
begin
OpenDialog1.Execute;
f:=OpenDialog1.FileName;
listaccount:= Tstringlist.Create;
listaccount.LoadFromFile(f);
end;
и пытаюсь обработать следующим образом:
var
 Form1: TForm1;
 f:string;
  listaccount::TStringList;
  TempS : string;
Res,Res1,Res2,Res3: string;
I : word;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var x:integer;
begin

for x:=0 to listaccount.Count-1 do begin

listaccount.Move(x,listaccount.Count-1);

if (pos ('Сотрудник Нпп="'+inttostr(x)+'">',listaccount[x])>0) then begin

TempS := StrPos (PChar (listaccount.GetText), PChar ('<Фамилия>'));
Delete (TempS, 1, Length ('<Фамилия>'));
I := 1;
Res := '';
While (TempS[I] <> '<') and (I <= Length (TempS)) do begin
  Res := Res + TempS[I];
  INC (I);
end;
TempS := StrPos (PChar (listaccount.GetText), PChar ('<Имя>'));
Delete (TempS, 1, Length ('<Имя>'));
I := 1;
Res1 := '';
While (TempS[I] <> '<') and (I <= Length (TempS)) do begin
  Res1 := Res1 + TempS[I];
  INC (I);
end;
TempS := StrPos (PChar (listaccount.GetText), PChar ('<Отчество>'));
Delete (TempS, 1, Length ('<Отчество>'));
I := 1;
Res2 := '';
While (TempS[I] <> '<') and (I <= Length (TempS)) do begin
  Res2 := Res2 + TempS[I];
  INC (I);
end;
TempS := StrPos (PChar (listaccount.GetText), PChar ('<Сумма>'));
Delete (TempS, 1, Length ('<Сумма>'));
I := 1;
Res3 := '';
While (TempS[I] <> '<') and (I <= Length (TempS)) do begin
  Res3 := Res3 + TempS[I];
  INC (I);
end;
 end;
Memo1.Lines.Append(res+';'+res1+';'+res2+';'+Res3);
 end;
end;

В memo выходит фигня, подскажите что делаю не так????
Спасибо....


brother   (2012-09-26 11:34:00) [1]

надеюсь работадатель присмотрится к тебе ближе после осмотра твоего "кода", ибо не понимать, что есть структурные файлы и писать что-либо для финансовой сферы - черевато!


n_sch   (2012-09-26 11:15:00) [2]

Спасибо, кажеться начал понимать.


Edgar_Wine   (2012-09-25 13:10:00) [3]

Вообще поддерживаю что с xml файлом надо работать как с xml файлом, но уметь менять текст (не xml, а любой) так как требуется в конкретном случае - всё же надо. =)

procedure TForm1.Button1Click(Sender: TObject);
var S: String; a, b: Integer;
begin
S:=Memo1.Text;
S:=StringReplace(S, ' ',                       '',     [rfReplaceAll, rfIgnoreCase]); // выкидываем пробелы
S:=StringReplace(S, #13,                       '',     [rfReplaceAll, rfIgnoreCase]); // выкидываем переносы строк Nix
S:=StringReplace(S, #10,                       '',     [rfReplaceAll, rfIgnoreCase]); // выкидываем переносы строк Mac
S:=StringReplace(S, '<Фамилия>',               '',     [rfReplaceAll, rfIgnoreCase]);
S:=StringReplace(S, '</Фамилия>',              ';',    [rfReplaceAll, rfIgnoreCase]);
S:=StringReplace(S, '<Имя>',                   '',     [rfReplaceAll, rfIgnoreCase]);
S:=StringReplace(S, '</Имя>',                  ';',    [rfReplaceAll, rfIgnoreCase]);
S:=StringReplace(S, '<Отчество>',              '',     [rfReplaceAll, rfIgnoreCase]);
S:=StringReplace(S, '</Отчество>',             ';',    [rfReplaceAll, rfIgnoreCase]);
S:=StringReplace(S, '<ФилиалОтделенияБанка>',  '<',    [rfReplaceAll, rfIgnoreCase]);
S:=StringReplace(S, '</ФилиалОтделенияБанка>', '>',    [rfReplaceAll, rfIgnoreCase]);
S:=StringReplace(S, '<Сумма>',                 '',     [rfReplaceAll, rfIgnoreCase]);
S:=StringReplace(S, '</Сумма>',                ';',    [rfReplaceAll, rfIgnoreCase]);
S:=StringReplace(S, '</Сотрудник>',            #13#10, [rfReplaceAll, rfIgnoreCase]);
a:=Pos('<', S);
b:=Pos('>', S);
while ((a>0) and (b>0)) do
     begin
     S:=Copy(S, 1, a-1)+Copy(S, b+1, Length(S)-b);
     a:=Pos('<', S);
     b:=Pos('>', S);
     end;
Memo1.Text:=S;
end;


Юрий Зотов   (2012-09-22 16:24:00) [4]

procedure TForm1.FormDblClick(Sender: TObject);
var
 i: integer;
begin
 with XMLDocument1, XML do
 begin
   LoadFromFile('D:/Temp/Сотрудники.xml');
   Insert(0, '<Сотрудники>');
   Add('</Сотрудники>');
   Insert(0, '<?xml version="1.0" encoding="Windows-1251"?>');
   Active := True
 end;
 with XMLDocument1.DocumentElement.ChildNodes do
   for i := 0 to Count - 1 do
   with Nodes[i] do
     Memo1.Lines.Add(Format('%s;%s;%s;%s',
       [ChildValues['Фамилия'], ChildValues['Имя'], ChildValues['Отчество'], ChildValues['Сумма']]))
end;


Юрий Зотов   (2012-09-22 15:26:00) [5]

> n_sch

Это не просто текст, а текст в формате XML. С ним и надо работать не как с простым текстом (через Memo), а как с текстом специального формата. И об этом Вам уже говорили в [5] и в [6]. См. TXmlDocument и справку по нему.


Медвежонок Пятачок   (2012-09-21 20:53:00) [6]

в основном то, что не слушаешь.


n_sch   (2012-09-21 20:39:00) [7]

То есть? Это как ? Где в цикле

for x:=0 to listaccount.Count-1 do begin

listaccount.Move(x,listaccount.Count-1);

if (pos ('Сотрудник Нпп="'+inttostr(x)+'">',listaccount[x])>0) then begin
...............
................

ошибка? Что я не так делаю?


Медвежонок Пятачок   (2012-09-21 20:10:00) [8]

переставь местами


n_sch   (2012-09-21 20:07:00) [9]

А на счет фигни которая появляется в memo, строки "кривые" т.е. фамилия первого, отчество второго, сумма опять первого и так весь список....


n_sch   (2012-09-21 20:03:00) [10]

Подскажите, а что такое xslt ?  Это компонент deplhi ?


брат Птибурдукова   (2012-09-21 19:49:00) [11]


> ГДЕ ошибка ????
В подходе. Хотя бы кинь на форму TXmlDocument и разбирайся.

Ну, можно ещё xslt нарисовать, которым можно будет получить файлик искомого формата... %-)


Медвежонок Пятачок   (2012-09-21 19:43:00) [12]

Ошибка номер один.
Не работай с этим как с текстом.


Anatoly Podgoretsky   (2012-09-21 19:42:00) [13]

> n_sch  (21.09.2012 18:41:00)  [0]

Фигня разная бывает, у тебя какая?


n_sch   (2012-09-21 19:29:00) [14]

Уважаемый ткни пожалуйста пальцем, ГДЕ ошибка ???? У меня уже "башня" едет....


Медвежонок Пятачок   (2012-09-21 19:02:00) [15]

ps с xml файлом надо работать как с xml файлом.
а если хочешь как с тектовым, то надо выучить арифметику, чтобы правильно указывать индексы при операциях удаления и копирования строк


Медвежонок Пятачок   (2012-09-21 19:00:00) [16]

фигню пишешь выходит фигня.
"нормально делай - нормально будет" - это я на футболке одной прочитал


Наверх

Титульная страница Поиск, карта сайта Написать письмо