Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.31;
Скачать: [xml.tar.bz2];

Вниз

Выборка данных из файла   Найти похожие ветки 

 
n_sch   (2012-09-21 18:41) [0]

Добрый день. Подскажите пожалуйста, как выбрать данные из файла и запихнуть их в 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 выходит фигня, подскажите что делаю не так????
Спасибо....


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

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


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

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


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

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


 
Anatoly Podgoretsky ©   (2012-09-21 19:42) [4]

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

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


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

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


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


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

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


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

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


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

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


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

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


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

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

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:53) [11]

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


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

> n_sch

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


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

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;


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

Вообще поддерживаю что с 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;


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

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


 
brother ©   (2012-09-26 11:34) [16]

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2013.03.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.004 c
15-1354825802
Юрий
2012-12-07 00:30
2013.03.31
С днем рождения ! 7 декабря 2012 пятница


15-1354548217
Александр
2012-12-03 19:23
2013.03.31
Delphi, помощь в составлении программы.


15-1354566602
Юрий
2012-12-04 00:30
2013.03.31
С днем рождения ! 4 декабря 2012 вторник


8-1227438798
Б
2008-11-23 14:13
2013.03.31
Графика


15-1353699619
Пит
2012-11-23 23:40
2013.03.31
ЖКХ развод?





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