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