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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2018, 15:51   #1
Taras2018
Пользователь
 
Аватар для Taras2018
 
Регистрация: 13.01.2018
Сообщений: 47
По умолчанию Разбить текст на части, подсказка.

Добрый день Уважаемые пользователи.
Этот код разбивает текст на части и сохраняет в одной папке.

Вопрос такого плана: Как сделать что бы каждый файл сохранялся в отдельной папке при разбитии ?.
Код:
procedure TForm2.Button1Click(Sender: TObject);
var
  n,k,j,p,q:integer;
  t,t1:TStringList;
  F1, F2 : File;
  i, SizePart, SizePartAdd : Cardinal;
  Buff : array of Byte;
 begin
  n:=strtoint(Edit1.Text);//количество разбиений
  t:=TStringList.Create;
  if OpenDialog1.InitialDir = '' then begin
    OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName);
  end;
  if not OpenDialog1.Execute then Exit;
  if not FileExists(OpenDialog1.FileName) then begin
    ShowMessage('Указанный файл не найден. Действие отменено.');
    Exit;
  end;
 
  AssignFile(F1, OpenDialog1.FileName);
  Reset(F1, 1);
 
  if FileSize(F1) < N then begin
    ShowMessage('Указанный файл слишком мал. Разбиение отменено.');
    CloseFile(F1);
    Exit;
  end;
 
  SizePart := FileSize(F1) div N;
  SizePartAdd := FileSize(F1) mod N;
  SetLength(Buff, SizePart);
 
  for i := 1 to N do begin
    AssignFile(F2, OpenDialog1.FileName + '.part' + IntToStr(i));
    Rewrite(F2, 1);
    BlockRead(F1, Pointer(Buff)^, SizePart);
    BlockWrite(F2, Pointer(Buff)^, SizePart);
    if (i = N) and (SizePartAdd > 0) then begin
      BlockRead(F1, Pointer(Buff)^, SizePartAdd);
      BlockWrite(F2, Pointer(Buff)^, SizePartAdd);
 
    end;
    CloseFile(F2);
  end;
 
  CloseFile(F1);
end;
Taras2018 вне форума Ответить с цитированием
Старый 31.01.2018, 16:05   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

0. придумать имя папки
1. создать папку
00.PNG
3. сохранить файл(.part) с новым полным именем(включающем только что созданную папку)
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 31.01.2018, 16:06   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Taras2018 Посмотреть сообщение
Как сделать что бы каждый файл сохранялся в отдельной папке при разбитии ?.
ну так очевидно же - создавать нужную папку и сохранять в неё!
создавать директории удобно через ForceDirectories()
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.01.2018, 16:07   #4
Taras2018
Пользователь
 
Аватар для Taras2018
 
Регистрация: 13.01.2018
Сообщений: 47
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
0. придумать имя папки
1. создать папку
3. сохранить файл(.part) с новым полным именем(включающем только что созданную папку)
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну так очевидно же - создавать нужную папку и сохранять в неё!
создавать директории удобно через ForceDirectories()
На коде что выше можете подсказать ? Если не сложно.

Последний раз редактировалось Taras2018; 31.01.2018 в 16:11.
Taras2018 вне форума Ответить с цитированием
Старый 31.01.2018, 16:55   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Taras2018 Посмотреть сообщение
На коде что выше можете подсказать ? Если не сложно.
немного непонятно, как связаны OpenDialog1.FileName, называние ".part" и название директории:


ну, да ладно, в качестве примера сойдёт, а дальше допилите под себя:
Код:
var
     sDirName : string;


....

  for i := 1 to N do begin
    sDirName := ExtractFilePath(OpenDialog1.FileName)+'part' + IntToStr(i);
    ForceDirectories(sDirName);
    AssignFile(F2, sDirName+'\file'+IntToStr(i));
    Rewrite(F2, 1);
....

p.s. и, раз Вы не используете TStringList - выкиньте t:=TStringList.Create; и обе переменные t и t1
p.p.s. BlockRead / BlockWrite - это антиквариат, рекомендую переписать через класс TFileStream
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.01.2018, 17:03   #6
Taras2018
Пользователь
 
Аватар для Taras2018
 
Регистрация: 13.01.2018
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну, да ладно, в качестве примера сойдёт, а дальше допилите под себя:

p.s. и, раз Вы не используете TStringList - выкиньте t:=TStringList.Create; и обе переменные t и t1
p.p.s. BlockRead / BlockWrite - это антиквариат, рекомендую переписать через класс TFileStream
Человеческое Спасибо.
Taras2018 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбить текст на части с учетом слов и HTML-тегов hon PHP 3 25.05.2013 19:59
Разбить число на части Surik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 23.02.2011 19:50
Разбить строку на 2 части 7KByte Общие вопросы C/C++ 6 31.05.2009 16:51
Разбить файл на 4 части borzoni Паскаль, Turbo Pascal, PascalABC.NET 7 31.05.2008 10:51
Разбить список на части fotobra Microsoft Office Excel 1 23.02.2008 03:13