Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2011, 18:23   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Сохранение файлов с именем с нумерацией 001,002,...

Всем привет! Прошу помощи в следующем вопросе. Нужно создать, при сохранении файлов, нумерацию 001, 002, 003.... и сохранять n-файлов с именем 048111PS01001.xml, 048111PS01002.xml ..... . Вот полный код обработки:
Код:
procedure TForm1.sSpeedButton3Click(Sender: TObject);
var
 Xmldoc:IXMLDocument;
 Ninode:IXMLNode;
 i,num,s: Integer;
 sFilename: string;
begin
 if Form1.sPathDialog1.Execute then
 begin
  Form1.sPanel11.Visible:=True;
  Form1.RxDice1.Visible:=True;
  Form1.RxDice1.Rotate:=True;
  Form1.sProgressBar1.Style:=pbstMarquee;
  Application.ProcessMessages;
  Form1.sEdit6.Text:=DateToStr(Now) + '|' + TimeToStr(Now);
  Form1.sEdit2.Text:=Form1.sPathDialog1.Path + '\';
 end;
  Form1.qry1.Active:=False;
  Form1.qry1.SQL.Clear;
  Form1.qry1.SQL.Text:='select * from ' + ExtractFileName(ChangeFileExt(Form1.sStatusBar1.Panels[3].Text,''));
  Form1.qry1.Active:=True;
  Application.ProcessMessages;
  Form1.sMemo1.Clear;
  Form1.qry1.First;
  Application.ProcessMessages;
  while not Form1.qry1.Eof do
  begin
   Form1.sLabel3.Caption:='Ïåðåíåñåíî çàïèñåé:';
   Form1.sMemo1.Lines.Add(Form1.qry1.FieldByName('INSNMB').AsString);

   if Form1.sMemo1.Lines.Count = StrToInt(Form1.sEdit13.Text) then
   begin
//============================ôîðìèðóþ äåðåâöå XML==============================
    Xmldoc:=TXMLDocument.Create(nil);
    Xmldoc.Active:=True;
    Xmldoc.Options:=Xmldoc.Options + [doNodeAutoIndent];
    Xmldoc.Version:='1.0';
    Xmldoc.Encoding:='Windows-1251';
    with Xmldoc do
    begin
      with  AddChild('snils_zl_list') do
         begin
           with AddChild('zglv') do
             begin
               ChildValues['filename']:=Form1.sEdit12.Text;
               ChildValues['version']:='1.0';
               ChildValues['cod_pfr']:=Form1.sEdit9.Text;
               ChildValues['nrec']:=Form1.sEdit13.Text;
             end;
             with AddChild('shils') do
             begin
                for i:=0 to Form1.sMemo1.Lines.Count - 1 do
                begin
                 with AddChild('snils') do ChildValues['snils']:=Form1.sMemo1.Lines[i];
                      Application.ProcessMessages;
                end;
             end;
         end;
    end;
    num:=1;

    if StrToInt(Form1.sLabel15.Caption) < 1000000000 then
    begin
     Form1.sLabel15.Caption:=IntToStr(StrToInt(Form1.sLabel15.Caption) + 1);
     Form1.lbl1.Caption:=Form1.sLabel15.Caption;
    end;
    if StrToInt(Form1.sLabel15.Caption) >= 10 then
    begin
     Form1.lbl1.Caption:=Form1.sLabel15.Caption[2] + Form1.sLabel15.Caption[3] +
                         Form1.sLabel15.Caption[4]
    end;

    Form1.sEdit12.Text:=Form1.sEdit9.Text + Form1.sEdit10.Text[3] +
                        Form1.sEdit10.Text[4] + Form1.sEdit11.Text + 'PS' +
                        Form1.sEdit8.Text + Form1.lbl1.Caption;


   sFilename:=Form1.sEdit2.Text + Form1.sEdit12.Text + '.xml';
   while FileExists(sFilename) do
    begin
     Inc(num);
     Form1.lbl1.Caption:=IntToStr(num);

    sFileName:=Form1.sEdit2.Text + Form1.sEdit12.Text + IntToStr(num) + '.xml';
    end;
    Xmldoc.SaveToFile(sFilename);
    Form1.sListBox1.Items.Add(Form1.sEdit12.Text + '.xml');
    Form1.sMemo1.Clear;
    Form1.sLabel1.Caption:=sFilename;
    Form1.Caption:=Form1.Caption + ' Ôàéë ñîõðàíåí â - [' + Form1.sLabel1.Caption + ']';
    Form1.sEdit7.Text:=DateToStr(Now) + '|' + TimeToStr(Now);
//==============================================================================
    end;
   Form1.sEdit4.Text:=IntToStr(Form1.sMemo1.Lines.Count);
   Form1.sEdit5.Text:=IntToStr(StrToInt(Form1.sEdit3.Text) - Form1.sMemo1.Lines.Count);
   Application.ProcessMessages;
   Form1.qry1.Next;
   Application.ProcessMessages;
   end;
  Application.ProcessMessages;

  if Form1.sMemo1.Lines.Count = 0 then
  begin
   Form1.sLabel7.Caption:='Ñîçäàíèå XML ôàéëîâ âûïîëíåíî! Áûëî ñîçäàíî [ ' +
                          IntToStr(Form1.sListBox1.Items.Count) + ' ] ôàéëîâ!';
   Form1.RxDice1.Visible:=False;
   Form1.RxDice1.Rotate:=False;
   MessageBox(Handle,'Ñîçäàíèå XML ôàéëà çàâåðøåíî!','Èíôîðìàöèÿ',MB_ICONINFORMATION);
  end;
end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 25.04.2011 в 18:25.
artemavd вне форума Ответить с цитированием
Старый 25.04.2011, 18:24   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию Продолжение

Создание нумерации 001,002... я решил таким кодом:
Код:
    if StrToInt(Form1.sLabel15.Caption) < 1000000000 then
    begin
     Form1.sLabel15.Caption:=IntToStr(StrToInt(Form1.sLabel15.Caption) + 1);
     Form1.lbl1.Caption:=Form1.sLabel15.Caption;
    end;
    if StrToInt(Form1.sLabel15.Caption) >= 10 then
    begin
     Form1.lbl1.Caption:=Form1.sLabel15.Caption[2] + Form1.sLabel15.Caption[3] +
                         Form1.sLabel15.Caption[4]
    end;
ПРошу помощи в объединении этих двух кодов, чтобы файлы создавались с правильной нумерацией:
048111PS01001.xml
048111PS01002.xml
048111PS01003.xml
......
Сам XML файл все правильно работает и создается, сохраняется как надо. Проблема с последними тремя цифрами в имени файла. Прошу реальной помощи по моему коду и по сабжу. Заранее спасибо за помощь! ПРоблема начинается с выделенного участка кода.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 25.04.2011, 19:04   #3
OlegVE
Форумчанин
 
Регистрация: 27.09.2010
Сообщений: 376
По умолчанию

Здравствуйте
Вариант формирования имени
Код:
var   source, dest : string;
...
  // Присвоение нашей первоначальной строки
  dest   := '0000000000000.xml'; // Длина = 17

  // Копирование подстроки из источника в середину приёмника
  Move(source[1], dest[13-Length(source)], Length(source));
 // Аналогично формируем начало имени
Может я что-то не так понял...
До свидания
P.S. Вы удаляете моё сообщение? Первый раз не записалось.

Последний раз редактировалось OlegVE; 25.04.2011 в 19:29.
OlegVE вне форума Ответить с цитированием
Старый 25.04.2011, 19:09   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Извини, но мне не надо других кодов. Мне нужно правильно расставить логически выделенный код, т.к. по отдельности этот код прекрасно работает. Всякие копирования и прочее мне не нужны в данном случае.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 25.04.2011, 19:43   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Число с потолка? Нет, так дело не пойдёт. Нумерация будет не верна в любом случае если программа не знает какой номер был придыдущий.

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

А ещё есть это: http://delphiworld.narod.ru/base/cou...tion_time.html

Последний раз редактировалось Человек_Борща; 25.04.2011 в 19:45.
Человек_Борща вне форума Ответить с цитированием
Старый 26.04.2011, 11:41   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

предлагаю такой вариант изменения кода:
Код:
   Num := 1;
   sFilename:=Form1.sEdit2.Text + Form1.sEdit12.Text + Format('%.3d',[Num]) + '.xml';
   while FileExists(sFilename) do
     begin
       Inc(num);
       Form1.lbl1.Caption := Format('%.3d',[Num]);

       sFilename:=Form1.sEdit2.Text + Form1.sEdit12.Text + Format('%.3d',[Num]) + '.xml';
      end;
   Xmldoc.SaveToFile(sFilename);
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение рабочей книги с именем, представляющим собой текущую дату YJYNGK Microsoft Office Excel 2 30.10.2010 21:12
копировать данные из файлов с изменяющимся именем Татьяна_45 Microsoft Office Excel 7 24.06.2010 17:26
Как объединить файлы wmv.001 и wmv.002 Senjja Софт 1 22.06.2010 22:07
Сортировка с нумерацией BloodWizard SQL, базы данных 1 02.05.2010 11:20
поиск и сохранение под другим именем fitc Общие вопросы Delphi 3 17.07.2009 18:50