Форум: "Начинающим";
Текущий архив: 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.006 c