файл

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

файл

Сообщение crancv » 12.02.2014 13:56:15

Прошу помощи. Как на паскаль написать программу, которая запрашивает ввод имени файла и если файл есть, создает другой файл, причем имя созданного файла - это расширение введенного имени файла+15, а расширение допустим .inc

Например: исходный файл Main.txt, в результате работы программы должен появиться файл txt15.inc

Начало в принципе понятно:
var
s:string;
Writeln('Введите имя файла');
read(s);

Как быть дальше ? Какой алгоритм дальнейших действий по созданию нового файла ?
crancv
незнакомец
 
Сообщения: 6
Зарегистрирован: 12.02.2014 13:50:51

Re: файл

Сообщение Sharfik » 12.02.2014 14:04:23

На листке бумаги берешь описываешь список действий твой, т.е. алгоритм. Стрелочками показываешь куда что возращается и обращается.
изучаешь функции необходимые для конкретных ситуаций по алгоритму. fileexist() extractfilepath() extractfileext() и т.п.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30

Re: файл

Сообщение crancv » 12.02.2014 14:28:12

Спасибо конечно, эти функции мне известны, но к сожалению не удается реализовать это программно, возникают те или иные трудности, то с расширением, то с именем. Если есть возможность, прошу приложить часть кода реализующую данные действия.
crancv
незнакомец
 
Сообщения: 6
Зарегистрирован: 12.02.2014 13:50:51

Re: файл

Сообщение Лекс Айрин » 12.02.2014 15:01:16

crancv если у тебя известно имя файла, то ...

1)после ввода файла откусываешь у полученной строчки расширение (найдя поиском от конца точку {помним о возможности двойного расширения!}или ExtractFileExt{но в этом случае, если я правильно помню, надо будет отрезать точку в первом символе}) и сохраняешь его отдельно. Можешь сразу же собрать имя.

2)ищешь файл функцией fileexist() если да, то создаешь файл. Если нет, то, соответственно, не создаешь.

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

ЗЫ: ты бы лучше свой код выложил...
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: файл

Сообщение qivi » 12.02.2014 15:07:21

Извлечение расширения из пути файла: http://www.delphibasics.ru/ExtractFileExt.php

Что б без точки спереди, можно например так:

Код: Выделить всё
copy(ExtractFileExt('C:\Program Files\Borland\Delphi7\Projects\Unit1.dcu'),2,length('C:\Program Files\Borland\Delphi7\Projects\Unit1.dcu')-1)
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: файл

Сообщение crancv » 12.02.2014 15:30:54

Вот текст программы, но в результате ее работы создается файл допустим с именем .inc (Безусловно при наличии файла допустим Main.inc в текущей директории).
Кто знает как избавиться от точки, добавить после inc цифру 15 и установить расширение к примеру .doc

Program One;
uses Utils;

type Resurses=record
Index:byte;
Kol_vo:uint64;
end;

var
Input:file;Output:text;Path:string;InputFileName:string;

Massive:array[0..255] of Resurses;
a:byte;
i:uint64;
Lenght:uint64;

//Вот кусок кода в котором нужно что-то добавить !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Begin
Writeln('Пожалуйста, введите имя файла');
Read(Path);
Assign(Input,Path);
if FileExists(Path) = False then
Writeln('File ',Input,' not found')
else
Begin
Assign(Output,ExtractFileExt(Path));
Reset(Input);
Writeln('File ',Path, ' open succeful !!!');
Lenght:=FileSize(Input);//Сохраним размер файла в переменной
Writeln('Размер файла равен : ',Lenght,' байт');

Rewrite(Output);//Открыть файл на запись

Writeln(Output,ExtractFileName(Path));//Запись имени файла
Writeln(Output,FileSize(Input));//Запись размера файла
Writeln(Output);//Пропустить строку в файле

//После этого ничего добавлять ненадо !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
///---------------------------------------------------------////
// Это область для экспериментов

for i:=1 to Lenght do
Begin
Read(Input,a);
inc (Massive[a].Kol_vo);
end;

for i:=0 to 255 do
begin
Massive[i].Index:=i;
writeln(Output,Massive[i].Index,' ',Massive[i].Kol_vo);
end;

//Конец области экспериментов

//Закрываем файлы
Close(Input);
Close(Output);

end;
end.
crancv
незнакомец
 
Сообщения: 6
Зарегистрирован: 12.02.2014 13:50:51

Re: файл

Сообщение Лекс Айрин » 12.02.2014 15:57:56

crancv писал(а):Кто знает как избавиться от точки, добавить после inc цифру 15 и установить расширение к примеру .doc


Это обычная работа со строками http://ret-prog.do.am/publ/programmirov ... i/3-1-0-14

Только помним о кодировках и если используется UTF8, то нужно выбирать функции работающие с ней. viewtopic.php?p=27100#p27100

Код: Выделить всё
Assign(Output,ExtractFileExt(Path));


Замени на, допустим,


Код: Выделить всё
Assign(Output, delete(ExtractFileExt(Path), 1, 1))


ЗЫ: Открывая файл стоит учитывать и то, что может не хватить на это прав.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: файл

Сообщение crancv » 12.02.2014 19:19:24

Спасибо, воспользовался Assign(Output, delete(ExtractFileExt(Path), 1, 1)); , только пришлось разбить ее на несколько строк текста, по другому PascalAbc.net вылетает
с ошибкой.
crancv
незнакомец
 
Сообщения: 6
Зарегистрирован: 12.02.2014 13:50:51

Re: файл

Сообщение Лекс Айрин » 13.02.2014 09:09:00

crancv, это уже мелочи. А вот то, что у тебя PascalAbc.net лучше было сразу сказать.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru