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

Вниз

Создание xml файла в делфи   Найти похожие ветки 

 
vgvolk   (2011-09-28 08:49) [0]

Приветсвую мастера.Мне нужно создать шапку xml файла(по щелчку по кнопке) такого типа

<?xml version="1.0" encoding="UTF-8" ?>
- <package subdivision="420-056" name="" date="20110906">
</package>

где значения package subdivision он берет из раскрывающегося списка на форме.Name из эдита.А date ставит текущую.
После этого мановением руки по другой кнопке он добавляет строку
<pasport page="1" seria="3206" number="124954" foto="3206124954.jpg" form="3206124954.tif" />
Pasport page изменяется значение 1,3,5,7,9.
seria берет из эдита.
number тоже из эдита.
foto seria + number+.jpg.
form seria + number+.tif.
И сохраняет файл под именем 420-056_20110906.1p
Вот вид уже готового файла
<?xml version="1.0" encoding="UTF-8" ?>
- <package subdivision="420-056" name="" date="20110906">
 <pasport page="1" seria="3206" number="124954" foto="3206124954.jpg" form="3206124954.tif" />
 <pasport page="3" seria="3209" number="756278" foto="3209756278.jpg" form="3209756278.tif" />
 <pasport page="5" seria="3208" number="635975" foto="3208635975.jpg" form="3208635975.tif" />
 <pasport page="7" seria="3205" number="996229" foto="3205996229.jpg" form="3205996229.tif" />
 <pasport page="9" seria="3202" number="941355" foto="3202941355.jpg" form="3202941355.tif" />
 <pasport page="11" seria="3207" number="402678" foto="3207402678.jpg" form="3207402678.tif" />
 <pasport page="13" seria="3201" number="306669" foto="3201306669.jpg" form="3201306669.tif" />
 <pasport page="15" seria="3204" number="722477" foto="3204722477.jpg" form="3204722477.tif" />
 <pasport page="17" seria="3209" number="794054" foto="3209794054.jpg" form="3209794054.tif" />
 <pasport page="19" seria="3204" number="554152" foto="3204554152.jpg" form="3204554152.tif" />
 </package>

Как это сделать,и с чего начать?


 
Медвежонок Пятачок ©   (2011-09-28 09:28) [1]

По моему, начать надо с тренировки руки. Правой.
Ибо в задании "... мановением руки по другой кнопке..."

PS Как натренируешь руку, начинай читать хелп по TXMLDocument.


 
RWolf ©   (2011-09-28 09:29) [2]

с гугления по ключевому слову TXMLDocument.


 
stas ©   (2011-09-28 10:40) [3]

ну, или сформируй как строку.


 
Cobalt ©   (2011-09-28 11:51) [4]

> stas ©   (28.09.11 10:40) [3]
> ну, или сформируй как строку.


Яростно плюсую.


 
QAZ   (2011-09-28 12:04) [5]


> stas ©   (28.09.11 10:40) [3]

+100500


 
vgvolk   (2011-09-28 12:58) [6]

Попробую как будут результаты отпишусь


 
Сергей М. ©   (2011-09-28 13:42) [7]


> vgvolk   (28.09.11 12:58) [6]
>
> Попробую


Обязательно начни пробовать с правой руки. Если конечно не левша.


 
vgvolk   (2011-09-29 11:32) [8]

Преобразовал я всё  в строку работает)
Только не знаю как текущую дату в строку добавить(date="20110906")
Когда добавляю в строку writeln date он пишет Несовместимость типов String and TDateTime.
И еще не могу понять У меня есть файл codes.xml там содержатся коды подразделений мне нужно чтобы пользователь из Combobox мог выбрать эти коды.Как загрузить в items комбобокса атрибуты этого файла?Только не предлагать вариант вписать вручную так как их там больше 300 и они могут изменятся.


 
stas ©   (2011-09-29 12:22) [9]

1. Строку еще нужно сохранить в формате UTF-8 !
2. formatDateTime("yyyymmdd",date())
3. TXMLDocument либо Парсинг xml самостоятельно.


 
vgvolk   (2011-09-29 12:32) [10]

Я меняю расширение .xml и открываю  в браузере IE.Открывает и нормально читает.Зачем сохранить в формате UTF-8?И как если это необходимо.


 
Dennis I. Komarov ©   (2011-09-29 12:58) [11]


> Когда добавляю в строку writeln date он пишет Несовместимость
> типов String and TDateTime.

Рано Вам еще про XML думать...


 
stas ©   (2011-09-29 13:06) [12]

vgvolk   (29.09.11 12:32) [10]
Будут проблемы с кодировкой если присутствуют допустим русские буквы.
преобразовать строку можно по моему функцией UTF8ToString


 
Cobalt ©   (2011-09-29 13:23) [13]

vgvolk
ОК, видно что и впрямь без TXMLDocument не обойтись.
Гугл тебе в помощь за примерами как работать с этим зверем, благо статей немало написано.


 
vgvolk   (2011-09-29 14:05) [14]

Спасибо за помощь.У меня еще вопросик Я сделал он создает файл правильно только есть одно но
<?xml version="1.0" encoding="UTF-8" ?>
- <package subdivision="420-056" name="" date="20110906">
 <pasport page="1" seria="3206" number="124954" foto="3206124954.jpg" form="3206124954.tif" />
 <pasport page="1" seria="3209" number="756278" foto="3209756278.jpg" form="3209756278.tif" />
 <pasport page="1" seria="3208" number="635975" foto="3208635975.jpg" form="3208635975.tif" />
 <pasport page="1" seria="3205" number="996229" foto="3205996229.jpg" form="3205996229.tif" /> </package>

Как видно страницу паспорта он пишет всегда 1 нужно что бы при новом открытии он проверял последнюю строку pasport page="1" текстового файла и новую изменял на 3.Следующую сделал бы 5 и т.д.Как то нужно создать цикл но какой цикл можно создать для строки?


 
Медвежонок Пятачок ©   (2011-09-29 14:27) [15]

Как видно страницу паспорта он пишет всегда 1

Пишет не "он", а ты.

нужно что бы при новом открытии он проверял последнюю строку

Снова не "он", а ты проверяй.

"Его" просто нет. Есть только ты.


 
Медвежонок Пятачок ©   (2011-09-29 14:32) [16]

Как то нужно создать цикл
циклы создаются операторами языка

но какой цикл можно создать для строки?
их всего два : repeat и while. выбор небольшой.


 
stas ©   (2011-09-29 14:44) [17]

vgvolk   (29.09.11 14:05) [14]
А как ты формируешь файл? покажи код


 
QAZ   (2011-09-29 15:42) [18]


> их всего два : repeat и while. выбор небольшой.

а ещо 2 куда делись :)


 
Медвежонок Пятачок ©   (2011-09-29 16:05) [19]

у них сегодня выходной


 
vgvolk   (2011-09-29 18:47) [20]


procedure TForm1.btn3Click(Sender: TObject);{Создание шапки xml}
var fil: TextFile;
   s:string;
begin
begin
AssignFile(fil,"C:\Folder\"+cbb1.Text+".txt");{cbb1-это комбобокс где пользователь выбирает код подразделения}
if FileExists("C:\Folder\"+cbb1.Text+".txt") then
Append(fil) else  rewrite(fil);
Writeln(fil,"<?xml version="1.0" encoding="UTF-8"?><package subdivision=""+cbb1.text+"" name="" date=""+formatdatetime("yyyymmdd",Date())+"">");
CloseFile(fil);
end;

Результат 1-го блока
<?xml version="1.0" encoding="UTF-8"?><package subdivision="010-008" name="" date="20110929">
Это создание шапки как видно я не закрываю его потому что мне нужно добавить дочерних узлов с данными,поэтому этот файл еще не полноценный xml файл
............

    begin{Создание "тела" файла}
AssignFile(fil,"C:\Folder\"+cbb1.Text+".txt");
if FileExists("C:\Folder\"+cbb1.Text+".txt") then
Append(fil) else  ShowMessage("Файл отсутсвует!");
Write(fil,"<pasport page="1" seria=""+edt1.text+"" number=""+edt2.text+"" foto=""+edt1.text+edt2.text+".jpg" form=""+edt1.Text+edt2.Text+".tif"/>");
CloseFile(fil);
end;

Результат 1+2 блок на примере добавления двух записей
<?xml version="1.0" encoding="UTF-8"?><package subdivision="010-008" name="" date="20110929">
<pasport page="1" seria="3208" number="1234" foto="32081234.jpg" form="32081234.tif"/><pasport page="1" seria="3209" number="7849" foto="32097849.jpg" form="32097849.tif"/><pasport page="1" seria="3256" number="46755" foto="325646755.jpg" form="325646755.tif"/>

............

AssignFile(fil,"C:\Folder\"+cbb1.Text+".txt");
if FileExists("C:\Folder\"+cbb1.Text+".txt") then
Append(fil) else  ShowMessage("Файл отсутсвует!");
Write(fil,"</package>");
CloseFile(fil);
Form1.Close;
RenameFile("C:\folder\"+cbb1.Text+".txt","C:\folder\"+cbb1.Text+"_"+formatdatetime("yyyymmdd",Date())+".1p");{Изменяет имя файла на код+дата+новое расширение}

Результат взаимодействия всех блоков

<<?xml version="1.0" encoding="UTF-8"?><package subdivision="010-008" name="" date="20110929">
<pasport page="1" seria="3208" number="1234" foto="32081234.jpg" form="32081234.tif"/><pasport page="1" seria="3209" number="7849" foto="32097849.jpg" form="32097849.tif"/><pasport page="1" seria="3256" number="46755" foto="325646755.jpg" form="325646755.tif"/></package>

Как видно добавилось только завершение файла </package>
Вот такой у меня код.Ну это только часть создания xml файла.Остальная делает совсем другие вещи.


 
Dennis I. Komarov ©   (2011-09-29 19:18) [21]

Ректально...


 
vgvolk   (2011-09-29 19:25) [22]

Это вы ректально на свет появились.А код рабочий.


 
Servy ©   (2011-09-29 19:30) [23]


> [20]


Ваш код плохо отформатирован и очень печален по своей сути. Я бы посоветовал вам ознакомиться с литературой по Делфи, прежде чем приступать к решению данной задачи (о чем вам уже намекали в [11] и [21]).

По поводу собственно задачи уже было сказано в [13]

> видно что и впрямь без TXMLDocument не обойтись.


Вам нужна библиотека для работы с xml. Формирование xml ручками занятие весьма неблагодарное и бесполезное, лучше уж книжки по Делфи читать вместо этого.

TXmlDocument несколько тяжеловат и не всегда интуитивен в использовании, зато про него немало написано в интернетах, ищущий найдет примеры использования без проблем.

Я бы для подобной задачи вместо TXmlDocument воспользовался модулем JclSimpleXml из джедайской библиотеки. Создание xml могло бы выглядеть как-нибудь так:

var
 Xml: TJclSimpleXML;
 XmlElement: TJclSimpleXMLElemClassic;

begin
 Xml := TJclSimpleXML.Create;
 try
   Xml.Prolog.Version := "1.0";
   Xml.Prolog.Encoding := "utf-8";

   // корневой элемент
   Xml.Root.Name := "package ";
   Xml.Root.Properties.Add("subdivision", "010-008");
   Xml.Root.Properties.Add("name", ""); // кстати, непонятно нафига вам пустой атрибут name
   Xml.Root.Properties.Add("date", "20110929");

   // создание элемента
   XmlElement := Xml.Root.Items.Add("pasport");
   // используя XmlElement.Properties добавляете ему все нужные атрибуты
   
   Xml.SaveToFile("C:\Temp\SomeFileName.xml"); // и да, абсолютные пути в исходнике - зло, тут только в демонстрационных целях и все такое
 finally
   Xml.Free;
 end;
end;


 
vgvolk   (2011-09-29 19:38) [24]

Спасибо,сейчас или завтра утром попробую использовать эту библиотеку.И кстати вопрос что мне изменить в коде чтобы он строку преобразовал в utf-8?


 
Servy ©   (2011-09-29 19:50) [25]

Я бы ваш код переписал изначально, ибо без слез его читать невозможно.

В целом же, преобразовать строку в UTF8 просто - нужно воспользоваться функцией UTF8Encode.


 
Dennis I. Komarov ©   (2011-09-29 19:59) [26]


> ибо без слез его читать невозможно.

Зато рабочий :)


 
stas ©   (2011-09-29 20:25) [27]

vgvolk   (29.09.11 18:47) [20]
2-й блок добавляет только 1 строчку в xml, а как появляются такие же остальные?


 
vgvolk   (2011-09-29 20:55) [28]

А мне как раз нужно чтобы строчки добавлялись не все разом.Я ввожу в эдитах серию,номер и нажимаю кнопку в которой прописан второй блок он добавляет нужную мне строчку.Потом я автоматом очищаю эдиты опять ввожу данные и добавляю еще строку.Когда я добавил все что хотел я закрываю файл третьим блоком.Первые два блока у меня записаны на отдельных кнопках а третий блок записан в событии Onclick компонета CheckBox.


 
Медвежонок Пятачок ©   (2011-09-29 21:06) [29]

устаешь наверное под вечер-то.


 
stas ©   (2011-09-29 21:57) [30]

vgvolk   (29.09.11 20:55) [28]
Так веди счетчик нажатий и подставляй его вместо page="1"

например

TForm1 = Class (Tform)
private
FClicks:Integer;
....
//на нажатие кнопки
FClicks:=FClicks+1;

//При формировании
Write(fil,"<pasport page=""+IntToStr(FClicks)+"" seria=""+edt1.text+"" number=""+edt2.text+"" foto=""+edt1.text+edt2.text+".jpg" form=""+edt1.Text+edt2.Text+".tif"/>");


 
stas ©   (2011-09-29 21:58) [31]

Только не забудь его сбрасывать в 0


 
Dennis I. Komarov ©   (2011-09-29 23:16) [32]


> stas ©

Ох, плохому ведь научишь...


 
vgvolk   (2011-09-30 07:59) [33]

Спасибо большое,все работает теперь.


 
vgvolk   (2011-09-30 08:31) [34]

У меня еще проблемка

var fil: TextFile;
   s:string;
begin
begin
fullFileName:="C:\Folder\"
AssignFile(fil,ExtractFilePath(fullFileName)+cbb1.Text+".txt");{cbb1-это комбобокс где пользователь выбирает код подразделения}
if FileExists(ExtractFilePath(fullFileName)+cbb1.Text+".txt") then
Append(fil) else  rewrite(fil);
Writeln(fil,"<?xml version="1.0" encoding="UTF-8"?><package subdivision=""+cbb1.text+"" name="" date=""+formatdatetime("yyyymmdd",Date())+"">");
CloseFile(fil);
end;

Мне нужно чтобы он кидал файлы не в C:\Folder\ а в C:\Folder\текущая дата
Т.е. создавать папку с именем текущей даты.Не знаю как вставить formatdatetime("yyyymmdd",Date()) в путь папки.Это вообще реально?


 
Dennis I. Komarov ©   (2011-09-30 09:19) [35]


> Мне нужно чтобы он кидал файлы не в C:\Folder\ а в C:\Folder\текущая
> дата

Еще одно гениальное решение... Нету у юзверей прав писать на C: (C:\Folder) и это правильно. И нефига писать проги, подразумевая что все ходят с админ-правами...


> Т.е. создавать папку с именем текущей даты.Не знаю как вставить
> formatdatetime("yyyymmdd",Date()) в путь папки.Это вообще
> реально?
>

Разумеется реально, DateToStr + F1


 
vgvolk   (2011-09-30 10:03) [36]

var fil: TextFile;
   s:string;
begin
begin
fullFileName:="C:\Folder\"+ DateToStr(Date){Добавляем дату}
AssignFile(fil,ExtractFilePath(fullFileName)+cbb1.Text+".txt");
if FileExists(ExtractFilePath(fullFileName)+cbb1.Text+".txt") then
Append(fil) else  rewrite(fil);
Writeln(fil,"<?xml version="1.0" encoding="UTF-8"?><package subdivision=""+cbb1.text+"" name="" date=""+formatdatetime("yyyymmdd",Date())+"">");
CloseFile(fil);
end;

Добавляю дату но это ничего не меняет я ее в разные места вставлял
fullFileName:="C:\Folder\+ DateToStr(Date)"{Добавляем дату}
fullFileName:="C:\Folder\DateToStr(Date)"{Добавляем дату}

Папку не создает


 
Dennis I. Komarov ©   (2011-09-30 10:06) [37]


> Папку не создает

И не должен...


 
Медвежонок Пятачок ©   (2011-09-30 10:26) [38]

Мне нужно чтобы он кидал файлы не в C:\Folder\

Ты ему-то и скажи, чтобы он кидал куда надо.


 
vgvolk   (2011-09-30 10:38) [39]

Каким образом?


 
Медвежонок Пятачок ©   (2011-09-30 10:40) [40]

сначала вежливо, а если не поймет, скажи, что позовешь местных и они ему наваляют.

кстати, открой секрет, кто такой "он"?


 
vgvolk   (2011-09-30 10:46) [41]

Нужно прииллюстрировать это на прмере.Он это делфи


 
Медвежонок Пятачок ©   (2011-09-30 11:03) [42]

ты вообще в курсе, что делфи надо запрограммировать, чтобы "он" кидал что-то куда-то и создавал папки где-то?

ты папку создавал?


 
Dennis I. Komarov ©   (2011-09-30 11:18) [43]


> Нужно прииллюстрировать это на прмере

Кому?


 
stas ©   (2011-09-30 11:52) [44]

http://www.google.com.ua/search?rlz=1C1_____enUA410UA410&aq=f&sourceid=chrome&ie=UTF-8&q=delphi+%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C+%D0%BF%D0%B0%D0%BF%D0%BA%D1%83


 
Плохиш ©   (2011-09-30 12:31) [45]

Изучение делфи на форуме за неделю для полных идиотов.


 
vgvolk   (2011-10-03 19:46) [46]

Так папку я создал
procedure TForm1.btn3Click(Sender: TObject);
var fil: TextFile;
   s:string;
begin
begin
ForceDirectories("C:\Форма1П\Выходные данные\"+DateToStr(Date));
fullFileName := "C:\Форма1П\Выходные данные\";
AssignFile(fil,ExtractFilePath  (fullFileName)+cbb1.Text+".txt");
if FileExists(ExtractFilePath  (fullFileName)+cbb1.Text+".txt") then
Append(fil) else  rewrite(fil);
Writeln(fil,"<?xml version="1.0" encoding="UTF-8"?><package subdivision=""+cbb1.text+"" name="" date=""+formatdatetime("yyyymmdd",Date())+"">");
CloseFile(fil);
Этот код создает пустую папку с текущей датой в нужном месте НО
куда мне вписать DateToStr(Date) чтобы текстовый файл он создавал в той же папке.Вставляю сюда fullFileName := "C:\Форма1П\Выходные данные\"+DateToStr(Date); Эффект нулевой.Что не так?


 
vgvolk   (2011-10-04 09:45) [47]

Никто не видет проблемы в коде а то я уже запарился.Мне нужно чтобы он все эти операции делал в папке с текущей датой.


 
RWolf ©   (2011-10-04 09:55) [48]

> ExtractFilePath  (fullFileName)+cbb1.Text+".txt"

и чему равняется ExtractFilePath  (fullFileName)+cbb1.Text+".txt" ?


 
Cobalt ©   (2011-10-04 09:56) [49]

Рекомендую пройтись по коду, вслух проговаривая, что именно делает твоя программа.
А то у тебя взгляд замылился.


 
stas ©   (2011-10-04 11:50) [50]

Cobalt ©   (04.10.11 09:56) [49]
+1
или напиши комментарии на каждой строчке


 
vgvolk   (2011-10-04 12:20) [51]

procedure TForm1.btn3Click(Sender: TObject);
var fil: TextFile;
begin
begin
ForceDirectories("C:\Форма1П\Выходные данные\"+DateToStr(Date));{Создает папку с именем равныи текущей дате}
fullFileName := "C:\Форма1П\Выходные данные\";{Создание относительного пути}
AssignFile(fil,ExtractFilePath  (fullFileName)+cbb1.Text+".txt");{ExtractFilePath  (fullFileName)это путь выше,cbb1.Text это код берется из комбобокса}
if FileExists(ExtractFilePath  (fullFileName)+cbb1.Text+".txt") then
Append(fil) else  rewrite(fil);{Если файл существует тогда добавить данные если нет тогда создать новый файл}
Writeln(fil,"<?xml version="1.0" encoding="UTF-8"?><package subdivision=""+cbb1.text+"" name="" date=""+formatdatetime("yyyymmdd",Date())+"">");{Запись текста в файл }
CloseFile(fil);{Закрытие файла}

Этот код создает папку именем равныи текущей дате(C:\Форма1П\Выходные данные\04.10.11) и текстовый файл(C:\Форма1П\Выходные данные\файл.txt) а мне нужно чтобы он сделал так(C:\Форма1П\Выходные данные\04.10.11\файл.txt).Т.е. чтобы он скидывал текстовый файл скидывался в путь создаваем функцией ForceDirectories.Вот такие пироги.


 
SergP ©   (2011-10-04 12:35) [52]

fullFileName := "C:\Форма1П\Выходные данные\";{Создание относительного пути}

какой путь создаешь, туда программа и скидывает файлы.

Если нужно с датой, то

fullFileName := "C:\Форма1П\Выходные данные\"+DateToStr(Date)+"\";

ЗЫ Только не работай с этой программой в полночь.


 
Dennis I. Komarov ©   (2011-10-04 12:41) [53]

ведь поди прога, (Судя по "Форма1П") для чьей-то работы нужна...


 
Очень Злой   (2011-10-04 12:49) [54]


> в путь создаваем функцией ForceDirectories.Вот такие пироги.


эта функция создает папку а не путь... Кроме того, она еще возвращает некоторое значение, которое тоже не помешало бы проанализировать...
А путь - это набор символов, показывающий расположение файла/папки в файловой системе.


 
vgvolk   (2011-10-04 12:51) [55]

ГИГАНТСКОЕ Спасибо.Теперь работает.Я делал почти то же самое только не знал что после DateToStr(Date) нужно писать слэш в кавычках)


 
SergP ©   (2011-10-04 13:12) [56]


> vgvolk   (04.10.11 12:51) [55]
>
> ГИГАНТСКОЕ Спасибо.Теперь работает.Я делал почти то же самое
> только не знал что после DateToStr(Date) нужно писать слэш
> в кавычках)


> ForceDirectories("C:\Форма1П\Выходные данные\"+DateToStr(Date));
> {Создает папку с именем равныи текущей дате}
> fullFileName := "C:\Форма1П\Выходные данные\";{Создание
> относительного пути}


Только лучше вычисляй дату один раз. а то действительно может глюкануть в полночь, Если между созданием папки и созданием файла произойдет смена даты, то глюканет...

Хотябы типа так:
fullFileName:="C:\Форма1П\Выходные данные\"+DateToStr(date);
ForceDirectories(fulFileName);
fullFileName := fullFileName+"\";


 
vgvolk   (2011-10-04 14:08) [57]

Спасибо.Попробую.Кстати я заметил такой глюк при смене раскладки клавиатуры(Shift+Alt) на форме пропадают все неактивные элементы,наверное это горячая клавиша делфи.хотя в списке горячих клавиш я не увидел.Может это глюк моей программы.Никто не сталкивался с подобным.Как ликвидировать этот глюк?


 
Cobalt ©   (2011-10-04 14:24) [58]

Насчет слешей - используй всегда функцию IncludeTrailingPathDelimiter()

а насчет неактивных - это как - пропадают?
в дизайнере?
совсем? из из модуля тоже?
или скрываются?


 
stas ©   (2011-10-04 14:31) [59]

vgvolk   (04.10.11 14:08) [57]
У тебя windows 7 ?
Это глюк, я тоже такое замечал.


 
RWolf ©   (2011-10-04 16:46) [60]

у меня тоже windows 7, но я такого не замечал.
как воспроизвести?


 
vgvolk   (2011-10-04 17:18) [61]

Они скрываются.Если на них отправляется действие то они появляются.Это получилось на Висте.Сейчас попробовал на ХР ничего не пропадает.


 
stas ©   (2011-10-04 17:20) [62]

RWolf ©   (04.10.11 16:46) [60]
У меня это происходит на формах с XP манифеестом, нажимаешь ALT и контролы исчезают, потом либо сразу появляются либо мышкой надо провести по форме.


 
vgvolk   (2011-10-04 17:25) [63]

Да это и есть тот самый глюк


 
vgvolk   (2011-10-05 12:48) [64]

procedure TForm1.btn3Click(Sender: TObject);
var fil: TextFile;
begin
begin
ForceDirectories("C:\Форма1П\Выходные данные\"+DateToStr(Date));{Создает папку с именем равныи текущей дате}
fullFileName := "C:\Форма1П\Выходные данные\"+DateToStr(Date)+"\";
AssignFile(fil,ExtractFilePath  (fullFileName)+cbb1.Text+".txt");{ExtractFilePath  (fullFileName)это путь выше,cbb1.Text это код берется из комбобокса}
if FileExists(ExtractFilePath  (fullFileName)+cbb1.Text+".txt") then
Append(fil) else  rewrite(fil);{Если файл существует тогда добавить данные если нет тогда создать новый файл}
Writeln(fil,UTF8Encode("<?xml version="1.0" encoding="UTF-8"?><package subdivision=""+cbb1.text+"" name="" date=""+formatdatetime("yyyymmdd",Date())+"">"));{Запись текста в файл }
CloseFile(fil);{Закрытие файла}

Код создает папку с текущей датой вставляет туда файлы.Но если я заново зайду в тот же день новый текстовый файл создается в той же папке.Куда мне вставить цикл чтобы если такая папка существует то он создавал новую папку с текущей датой долько добавил к имени(1).К следующей (2) и т.д.Типа C:\Папка\папка с текущей датой(1) потом C:\Папка\папка с текущей датой(1)?


 
RWolf ©   (2011-10-05 13:12) [65]

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


 
Медвежонок Пятачок ©   (2011-10-05 13:15) [66]

чтобы если такая папка существует то он создавал новую папку с текущей датой долько добавил к имени(1).К следующей (2)

сам спросил, сам ответил.

while directoryexists(dir_name) do
inc(i);
dir_name := dir_name + inttostr(i);
....


 
vgvolk   (2011-10-05 13:30) [67]

А заместь dir_name мне написать "C:\Форма1П\Выходные данные\"+DateToStr(Date)?Пишет ошибку.А инструмент мне без разницы какой просто я думаю тут цикл нужен.


 
Медвежонок Пятачок ©   (2011-10-05 13:32) [68]

Пишет ошибку.

Раз пишет, то это неспроста.
Это надо читать.


 
vgvolk   (2011-10-05 13:35) [69]

while directoryexists("C:\Форма1П\Выходные данные\"+DateToStr(Date)) do
inc(i);
"C:\Форма1П\Выходные данные\"+DateToStr(Date) := "C:\Форма1П\Выходные данные\"+DateToStr(Date) + inttostr(i)

Пишет левая сторона не может назначить к


 
Медвежонок Пятачок ©   (2011-10-05 13:38) [70]

он тебе правду пишет.
ты ему верь.


 
vgvolk   (2011-10-05 13:38) [71]

Что конкретно не правильно?


 
Медвежонок Пятачок ©   (2011-10-05 13:41) [72]

все что после inc


 
Dennis I. Komarov ©   (2011-10-05 13:41) [73]


> Медвежонок Пятачок ©   (05.10.11 13:15) [66]
>
> чтобы если такая папка существует то он создавал новую папку
> с текущей датой долько добавил к имени(1).К следующей (2)
>
> сам спросил, сам ответил.
>
> while directoryexists(dir_name) do
> inc(i);
> dir_name := dir_name + inttostr(i);
> ....

В твоем коде Inc() не обязателен :)


 
Плохиш ©   (2011-10-05 13:41) [74]


> "C:\Форма1П\Выходные данные\"+DateToStr(Date) := "C:\Форма1П\Выходные
> данные\"+DateToStr(Date) + inttostr(i)
>

Надо распечатать и на стену повесить


 
Dennis I. Komarov ©   (2011-10-05 13:42) [75]


> Что конкретно не правильно?

Мозг...


 
vgvolk2   (2011-10-05 13:43) [76]

Так как написать её имя мне же нужно прописать полный путь.
Блин уже кто-то под моим логином зарегистрировался


 
Плохиш ©   (2011-10-05 13:47) [77]

Книжку прочитать пора всё-таки...


 
Медвежонок Пятачок ©   (2011-10-05 13:48) [78]

полный путь, а не полные пути.

мужской род, единственное число.


 
SergP ©   (2011-10-05 13:54) [79]

Это:
ForceDirectories("C:\Форма1П\Выходные данные\"+DateToStr(Date));{Создает папку с именем равныи текущей дате}
fullFileName := "C:\Форма1П\Выходные данные\"+DateToStr(Date)+"\";


замени на это:
filepath:="C:\Форма1П\Выходные данные\"+DateToStr(Date);
addname:="";
i:=1;
while not ForceDirectories(filepath+addname) do
 begin
   addname:="("+inttostr(i)+")";
   inc(i);
 end;
fullFileName:=filepath+addname+"\";

Вроде так, хз...  Может заработает...

Только в var добавь:
addname:string;
i:integer;


 
stas ©   (2011-10-05 14:00) [80]

vgvolk   (05.10.11 13:38) [71]
Мы уже всем форумом тебе программу пишем, с тебя коньяк.
...Каждому)


 
vgvolk1   (2011-10-05 17:06) [81]

Если б я спрашивал о каждом косяке программы то форума бы не хватило:).Это только маленькая часть программы.Самые сложные моменты.


 
vgvolk1   (2011-10-05 17:09) [82]

Я не понял почему когда пишу vgvolk,vgvolk2 пишет что уже такой пользователь есть.Это своеобразный бан за лимит вопросов?


 
Dennis I. Komarov ©   (2011-10-05 17:58) [83]


> Это только маленькая часть программы.Самые сложные моменты.

Я плакалЪ... Простые моменты - это наверное "залезть" в 0-ring? :)



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

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

Наверх




Память: 0.68 MB
Время: 0.006 c
15-1317198478
boriskb
2011-09-28 12:27
2012.01.15
Прототип «русской Windows» разработают за 5 млн рублей


15-1316896202
Юрий
2011-09-25 00:30
2012.01.15
С днем рождения ! 25 сентября 2011 воскресенье


2-1317892848
ford
2011-10-06 13:20
2012.01.15
findfirst не ищет в temp пользователя win7


15-1316837540
SQLEX
2011-09-24 08:12
2012.01.15
идиотека..


8-1221912190
Elz
2008-09-20 16:03
2012.01.15
Помогите найти ошибку в коде





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