Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.15;
Скачать: CL | DM;

Вниз

Создание 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;
Скачать: CL | DM;

Наверх




Память: 0.7 MB
Время: 0.011 c
15-1317303611
БарЛог
2011-09-29 17:40
2012.01.15
Контроллеры домена для разных сайтов


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


1-1280310464
George
2010-07-28 13:47
2012.01.15
Обращение к сетевой папке из службы


2-1317796120
Laguna
2011-10-05 10:28
2012.01.15
Обработка ошибок в открывающейся форме


2-1317934451
Евгений07
2011-10-07 00:54
2012.01.15
MySql через интернет и Дельфи 6