Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вставить в начало каждого сохраненного файла, строку именем названного файла 
:(
    Опции темы
Serhik_z
  Дата 15.6.2005, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 108
Регистрация: 4.12.2004

Репутация: нет
Всего: нет



Сохраняю файл с 1000 строк, по 200 строк в файл.
Как вставить в начало каждого сохраненного файла строку,
именем которого назван сохраненный файла, без расширения.

Код

var
  Form2: TForm2;
  EditedFile: string;

implementation

uses Unit1;

{$R *.dfm}

// Вывод----------------------
procedure TForm2.Button1Click(Sender: TObject);
var
 m: integer;
begin
 m:= StrToInt(Edit1.Text);
 SaveStringsToFiles(Form1.Memo1.Lines, m);
 Form2.Close;
end;

// Сохранение------------------
function TForm2.SaveStringsToFiles(const AList: TStrings;
  ACountLines: Integer): Boolean;
var
i, x: integer;
List: TStrings;
begin
List:= TStringList.Create;
x:= 1;//Начальный файл с номера 1
for i:= 0 to Alist.Count-1 do
  begin
  List.Add(AList.Strings[i]);
  if ((i+1) mod ACountLines = 0)and(i<>0)
  then
    begin
    List.SaveToFile('L'+IntToStr(x)+'.iso');
    x:= x+1;
    List.Clear;
    end;
  end;
List.SaveToFile('L'+IntToStr(x)+'.iso');
List.Free;
Result:= True;
end;

smile
PM MAIL   Вверх
Poseidon
Дата 15.6.2005, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Ты сначало создаешь текст того файла, каторый хочешь сохранить, а потом определяешь его имя. Сделай наоборот. Сначало определи имя, а потом создавай текст:

Код
function TForm2.SaveStringsToFiles(const AList: TStrings;
  ACountLines: Integer): Boolean;
var
i, x: integer;
List: TStrings;
FileName: string;
begin
List:= TStringList.Create;
x:= 1;//Начальный файл с номера 1
FileName:= 'L'+IntToStr(x);
List.Add(FileName);
for i:= 0 to Alist.Count-1 do
  begin
  List.Add(AList.Strings[i]);
  if ((i+1) mod ACountLines = 0)and(i<>0)
  then
    begin
    List.SaveToFile(FileName+'.iso');
    x:= x+1;
    FileName:= 'L'+IntToStr(x);
    List.Clear;
    List.Add(FileName+'.iso');
    end;
  end;
List.SaveToFile(FileName+'.iso');
List.Free;
Result:= True;
end;



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Serhik_z
Дата 17.6.2005, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 108
Регистрация: 4.12.2004

Репутация: нет
Всего: нет



Poseidon - Спасибо!
Можно также вставить в конец текста.
PM MAIL   Вверх
Poseidon
Дата 17.6.2005, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(Serhik_z @ 17.6.2005, 12:24)
Можно также вставить в конец текста.
Я не понял, это вопрос или просто уточнение?



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Serhik_z
Дата 17.6.2005, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 108
Регистрация: 4.12.2004

Репутация: нет
Всего: нет



Вопрос.

Пробавал вставить последней строкой, неполучилось.
А можно вставить как в первом случае, только во всех направлениях.
Тоесть в саму строку, вначале и конце и последней строкой.
Как вверх вниз, вправо влево.
PM MAIL   Вверх
Poseidon
Дата 18.6.2005, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Serhik_z, ничего не понял. Если нужно вставить название файла в конец этого файла, то используй свой код из первого поста.
Цитата(Serhik_z @ 17.6.2005, 23:56)
А можно вставить как в первом случае, только во всех направлениях.
Тоесть в саму строку, вначале и конце и последней строкой.
Т.е. ты хочешь, что бы в начале и конце каждой строки боло имя файла? И при этом это же имя бало в начале и конце этого файла? Я правильно понял?

Это сообщение отредактировал(а) Poseidon - 18.6.2005, 00:10


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Serhik_z
Дата 18.6.2005, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 108
Регистрация: 4.12.2004

Репутация: нет
Всего: нет



Вставить последнюю строку.
Компиляция идет, но при запуске программы возникает сбой.
Код

procedure TForm2.Button1Click(Sender: TObject);
var
 m: integer;
begin
 m:= StrToInt(Edit1.Text);
 SaveStringsToFiles(Form1.Memo1.Lines, m);
 Form2.Close;
end; 

function TForm2.SaveStringsToFiles(const AList: TStrings;
  ACountLines: Integer): Boolean;
var
i, x: integer;
List: TStrings;
FileName: string;
 F: Textfile;//для последней строки
begin
List:= TStringList.Create;
x:= 1;//Начальный файл с номера 1
FileName:= 'L'+IntToStr(x);
List.Add(FileName);
for i:= 0 to Alist.Count-1 do
  begin
  List.Add(AList.Strings[i]);
  if ((i+1) mod ACountLines = 0)and(i<>0)
  then
    begin
    List.SaveToFile(FileName+'.iso');
    x:= x+1;
    FileName:= 'L'+IntToStr(x);
    List.Clear;
    List.Add(FileName+'');//Убрать .iso для каждого файла L1 L2 L3
    AssignFile(f, FileName);
  Append(f); 
  Writeln(f, 'Последняя строка');
  Closefile(f);
    end;
  end;
List.SaveToFile(FileName+'.iso');
List.Free;
Result:= True;
end;

PM MAIL   Вверх
Poseidon
Дата 18.6.2005, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Ты уверен, что сбой именно этот код вызывает? Я только что проверил и у меня все прошло. Какая именно ошибка возникает?
И проверь, действительно-ли у тебя в Edit1 число. А то, если там не число, то из-за этого тоже может быть ошибка.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Serhik_z
Дата 18.6.2005, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 108
Регистрация: 4.12.2004

Репутация: нет
Всего: нет



Открываю файл с 1000 строк.
Сохраняю по 200 строк в файл.
Сохраняется 1 файл и не добавляет последнюю строку.
Ошибка File not Found

Код

 AssignFile(f, FileName);
  Append(f); 
  Writeln(f, 'Последняя строка');
  Closefile(f);


Это сообщение отредактировал(а) Serhik_z - 18.6.2005, 01:50
PM MAIL   Вверх
Poseidon
Дата 18.6.2005, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Млин, Serhik_z, проблема-то у тебя пустяковая, только ты обьяснить нормально не можешь, что ты делаешь (т.е. каким кодом) и что хочешь получить из этого. Если ты приведенным тобой выше кодом пытаешься
Цитата(Serhik_z @ 18.6.2005, 01:48)
Сохраняю по 200 строк в файл.
то извени меня...
А ошибка эта возникает из-за того, что в FileName неверный путь к файлу или у этого файла установлен атрибут "только чтение", потаму как Append(f) открывает файл в режиме добавления к уже существующим данным, находящимся в этом файле. И если файла нет (или путь не верно указан), то возникнет эта ошибка. Такое случай нужно предусматреть (с помощью FileExists) и использовать ReWrite(f)

Добавлено @ 02:06
Цитата(Serhik_z @ 18.6.2005, 01:48)
Сохраняется 1 файл и не добавляет последнюю строку.
А это именно из-за того, что возникает ошибка и выполнение кода прекращается



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Serhik_z
Дата 18.6.2005, 03:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 108
Регистрация: 4.12.2004

Репутация: нет
Всего: нет



Не добавлят в файлы.
Подскажи пример.
Код

function TForm2.SaveStringsToFiles(const AList: TStrings;
  ACountLines: Integer): Boolean;
var
i, x: integer;
List: TStrings;
FileName: string;
 F: TextFile;
begin
List:= TStringList.Create;
x:= 1;
FileName:= 'L'+IntToStr(x);
List.Add(FileName);
for i:= 0 to Alist.Count-1 do
  begin
  List.Add(AList.Strings[i]);
  if ((i+1) mod ACountLines = 0)and(i<>0)
  then
    begin
    List.SaveToFile(FileName+'.iso');
    x:= x+1;
    FileName:= 'L'+IntToStr(x);
    List.Clear;
    List.Add(FileName+'');
//----------------
  AssignFile(f, FileName+'.iso');
  ReWrite(f);
  Writeln(f, 'Последняя строка');
  Closefile(f);
    end;
  end;
List.SaveToFile(FileName+'.iso');
List.Free;
Result:= True;
end;

smile smile smile
PM MAIL   Вверх
Poseidon
Дата 18.6.2005, 03:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



На сколько я понял, тебе нужно добавить в каждый файл еще свою строку в конец. Если так, то вот:

Код
function TForm2.SaveStringsToFiles(const AList: TStrings;
  ACountLines: Integer): Boolean;
var
i, x: integer;
List: TStrings;
FileName: string;
begin
List:= TStringList.Create;
x:= 1;//Начальный файл с номера 1
FileName:= 'L'+IntToStr(x);
List.Add(FileName);
for i:= 0 to Alist.Count-1 do
  begin
  List.Add(AList.Strings[i]);
  if ((i+1) mod ACountLines = 0)and(i<>0)
  then
    begin
    List.Add('Последняя строка');// вот это добавили
    List.SaveToFile(FileName+'.iso');
    x:= x+1;
    FileName:= 'L'+IntToStr(x);
    List.Clear;
    List.Add(FileName+'.iso');
    end;
  end;
List.SaveToFile(FileName+'.iso');
List.Free;
Result:= True;
end;



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Girder
Дата 18.6.2005, 03:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Код
procedure SaveStr(var Str:string; fName:string; Count:integer; Overwrite:boolean);
var Ext:string;
    n,i,j,k,t:integer;
    ft,D:DWord;
    sNF:string;
begin
 fName:=trim(fName);
 Ext:=ExtractFileExt(fName);
 fName:=copy(fName,1,Length(fName)-Length(Ext));
 if (fName='')or(Length(Str)=0)or(Count=0) then exit;
 n:=1;
 j:=1;
 D:=CREATE_NEW;
 if Overwrite then D:=CREATE_ALWAYS;
 while (j<=Length(Str)) do
  begin
   k:=Count;
   i:=j;
   while (k>0)and(j<=Length(Str)) do
    begin
     if (Str[j] in [#10,#13]) then
      begin
       if (j<Length(Str))and(Str[j]<>Str[j+1]) then inc(j);
       dec(k);
      end;
     inc(j); 
    end;
   repeat
    sNF:=fName+IntToStr(n);
    ft:=CreateFile(PChar(sNF+Ext),GENERIC_WRITE,0,nil,D,FILE_ATTRIBUTE_NORMAL,0);
    if (ft=INVALID_HANDLE_VALUE)and(Overwrite) then exit;
    inc(n);
   until (ft<>INVALID_HANDLE_VALUE);
   sNF:=ExtractFileName(sNF)+#13+#10;
   WriteFile(ft,sNF[1],Length(sNF),DWord(t),nil);
   WriteFile(ft,Str[i],j-i,DWord(t),nil);
   if not(Str[j-1] in [#10,#13]) then sNF:=#13+#10+sNF;
   WriteFile(ft,sNF[1],Length(sNF)-2,DWord(t),nil);
   CloseHandle(ft);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var c:integer;
    s:string;
begin
 try
  c:=StrToInt(Edit1.Text);
 except
  c:=200;
 end;
 s:=Memo1.Lines.Text;
 SaveStr(s,'e:\L.iso',c,true);
end;



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Serhik_z
Дата 18.6.2005, 03:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 108
Регистрация: 4.12.2004

Репутация: нет
Всего: нет



Poseidon - Большое спасибо.
Вот только в последний сохраняемый файл не добавляет строку.
PM MAIL   Вверх
Poseidon
Дата 18.6.2005, 03:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Serhik_z, посмотри код Гирдера. Я в нем не разбирался, т.к. уже позно smile
А насчет
Цитата(Serhik_z @ 18.6.2005, 03:42)
в последний сохраняемый файл не добавляет строку.
это да, ошибочка, одну строчку добавь в мой предыдущий код после 25 строки:
Код
List.Add('Последняя строка');// 




--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0576 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.