Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];

Вниз

вопрос по bat нику можно?   Найти похожие ветки 

 
heady   (2003-09-17 13:45) [0]

Подскажите пожалуйста, как заменить в текстовом файле все точки на запятые bat-файлом. Зарание благодарен.


 
DVM   (2003-09-17 13:49) [1]

А проблема в том чтобы заменить или в том чтобы файл открыть? Если и в том и в другом, то это смахивает на студенческое задание.


 
DSA   (2003-09-17 13:53) [2]

По алгоритму:
1. открываеш файл.
2. перебираеш по одному символу с 1 по последний
3. if s[i]="." then s[i]:=",";


 
heady   (2003-09-17 13:54) [3]

скорее в том чтобы заменить, хотя...:)


 
Anatoly Podgoretsky   (2003-09-17 13:55) [4]

ReplacePrg жертва


 
heady   (2003-09-17 13:57) [5]

спасибо, алгоритм вполне ясен и реализован на TP7, надо батником :(
ReplacePrg - это как?


 
Anatoly Podgoretsky   (2003-09-17 13:58) [6]

Программа замены, вставить в bat файл


 
wl   (2003-09-17 13:59) [7]

Из батника запускаешь прогу, которая меняет все точки на запятые в тексте.


 
DVM   (2003-09-17 13:59) [8]

Люди по-моему мы неправильно поняли человека. Ему надо, чтобы изменения делал сам BAT файл, своими командами? Да? Т.е. делфи тут вроде как ни при чем.


 
Palladin   (2003-09-17 14:02) [9]


> heady (17.09.03 13:57) [5]

смысл?


 
heady   (2003-09-17 14:02) [10]

да дельфи тут совершенно не при чем, нужен исключительно батник просто я очень уважаю этот форум, и надеюсь на знающих людей...


 
heady   (2003-09-17 14:05) [11]

смысл простой - я пишу ТОЛЬКО на TP7, а него трудности :) с длинными именами, изучение дельфи только начал, а прога такая простая, что аж стыдно...


 
Palladin   (2003-09-17 14:06) [12]

bat файл предназначен для выполнения внутренних комманд ОС (если такие еще остались :) ) и исполнения внешних программ, это не есть низкоуроневый язык программирования


 
Palladin   (2003-09-17 14:09) [13]

ах вот в чем дело...
замени в программе на TP7 все длинные имена на короткий аналог
скажем "c:\program files\dd" в своем коротком варианте "c:\progra~1\dd"

для выяснения точного названия набери в консоли dir, он должен выдать как длинные так и короткие имена... если это w98 в остальных случаях нужно запустить dir /x


 
heady   (2003-09-17 14:09) [14]

ты хочешь сказать - это невозможно?
а как же всякие FIND или FINDSTR?


 
DVM   (2003-09-17 14:10) [15]

Сам BAT - файл такого не умеет, по-моему. Но возможно такое умеют какие-нибудь утилиты включенные в MS-DOS 6.22. Но их (утилит) нет в том досе, что в Win9x.


 
DVM   (2003-09-17 14:14) [16]


> heady (17.09.03 14:05) [11]
> смысл простой - я пишу ТОЛЬКО на TP7, а него трудности :)
> с длинными именами, изучение дельфи только начал, а прога
> такая простая, что аж стыдно...

Пиши консольное приложение. Там с длинными именами полный порядок. Естественно только в виндах.


 
heady   (2003-09-17 14:15) [17]

но если есть (и работают) FIND, FINDSTR, copy, if, for, то я уверен, что столь простая задачка имеет решение и в bat-варианте... напишу кину :)


 
Palladin   (2003-09-17 14:17) [18]


> heady (17.09.03 14:15) [17]

угу, дерзай...


 
heady   (2003-09-17 14:19) [19]

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


 
Nikolay M.   (2003-09-17 14:21) [20]

Пиши не bat-файлы, а wsh(wsf) - скрипты.
http://winchanger.narod.ru/articles/aboutwsh.html


 
DVM   (2003-09-17 14:21) [21]


> heady (17.09.03 14:19) [19]

Я имел ввиду консольное приложение на Delphi.


 
Плохиш_   (2003-09-17 14:24) [22]

>heady (17.09.03 14:15) [17]
> но если есть (и работают) FIND, FINDSTR, copy, if, for,
> то я уверен, что столь простая задачка имеет решение и в
> bat-варианте


Если б ты ещё знал, что делают FIND, FINDSTR, copy было б совсем здорово.


 
heady   (2003-09-17 14:25) [23]

возник вопрос:
можно ли что где-нить компильнуть вот такой исходник, чтобы он умел работать с длинными именами?

uses crt;
var
FileName:string;
f:text;
i:integer;
begin
clrscr;
FileName:=ParamStr(1);
for i:=1 to length(ParamStr(1)) do
if FileName[i]="." then
begin
FileName[i+1]:="t";
FileName[i+2]:="x";
FileName[i+3]:="t";
end;
assign(f,FileName);
rewrite(f);
write(f,"Hello!");
writeln(ParamStr(1));
writeln(FileName);
readkey;
close(f);
end.
я надеюсь смысл понятен :)


 
Palladin   (2003-09-17 14:27) [24]

> heady (17.09.03 14:19) [19]
я тебе прекрасно объяснил как обойти проблему длинных имен в программах для DOS...


> у консольного варианта такие же трудности с длинными именами,
> как и любого другого компиленного на tp, если ты думаешь,
> что если имя открываемого задается параметром из строки
> и оно длинное и этот файл будет доступен то ты ошибаешься...

у win32 консольной программы нет проблем с длинными именами
у комманд win32 консоли тоже нет проблем с длинными именами, достаточно лишь заключить это имя в двойные кавычки...

заканчивай неправду тут постить


 
heady   (2003-09-17 14:27) [25]

2Nikolay M. можешь реализовать?


 
DVM   (2003-09-17 14:28) [26]

В Делфи можно, только CRT выкинь.


 
Palladin   (2003-09-17 14:28) [27]


> heady (17.09.03 14:25) [23]

указать в параметре запуска не длинное имя файла, а короткое, способ его получить я тебе уже описал


 
Palladin   (2003-09-17 14:29) [28]


> В Делфи можно, только CRT выкинь.

+ Assign на AssignFile, Close на CloseFile заменить


 
heady   (2003-09-17 14:31) [29]

2Palladin компильни мой исходник на tp7, с параметром скажем абвгдежзик.bak и ты ведь не получишь абвгдежзик.txt со словом "Hello!" :) а цель где-нить(как-нить) откомпилить чтобы все работало...


 
Nikolay M.   (2003-09-17 14:31) [30]


> heady (17.09.03 14:27) [25]
> можешь реализовать?

Угу. Но не буду.
Ссылка у тебя есть, яндекс/гугль, надеюсь, тоже.


 
heady   (2003-09-17 14:36) [31]

блин, клево если так! можете кинуть тот же исходник но для дельфи, что бы только ctrl-f9 нажать :) по гроб жизни благодарен буду!


 
DVM   (2003-09-17 14:39) [32]

Да что кидать-то, он у тебя есть уже. Что изменить написали. В делфи создай новое консольное приложение и вставь все туда. Программа такая же как на паскале.


 
heady   (2003-09-17 14:39) [33]

2Плохиш_ я знаю что делают FIND, FINDSTR, copy и даже знаю значки ">" и ">>" по идеее их должно хватать ;)


 
Palladin   (2003-09-17 14:40) [34]

var
FileName:string;
f:textfile;
i:integer;
begin
clrscr;
FileName:=ParamStr(1);
if Pos(".",FileName)=0 then FileName:=FileName+".txt"
else FileName:=Copy(FileName,1,Pos(".",FileName)-1)+".txt";
assignfile(f,FileName);
rewrite(f);
write(f,"Hello!");
writeln(ParamStr(1));
writeln(FileName);
readln;
closefile(f);
end.


 
heady   (2003-09-17 14:41) [35]

2DVM а как создать консольно приложение? я ж не местный :)


 
DVM   (2003-09-17 14:45) [36]

File > New > Other > Console Application.

Или File > Application и постирать все, модуль Unit1.pas и все в Project1.dpr


 
heady   (2003-09-17 14:47) [37]

огромное спасибо! ну я побежал творить :)


 
heady   (2003-09-17 15:03) [38]

2Palladin не заметил сразу - круто! спасибо! я могу писать на дельфи!!!! :)


 
Anatoly Podgoretsky   (2003-09-17 15:20) [39]

DVM © (17.09.03 13:59) [8]
Palladin © (17.09.03 14:06) [12]
Внутренних и внешних, я предлагаю второе, поскольку первые не умеют.


 
heady   (2003-09-17 15:32) [40]

for /?

eol=c - определение символа комментариев в конце строки
(допускается задание только одного символа).
skip=n - число пропускаемых при обработке строк в начале
файла.
delims=xxx - определение набора разделителей для замены заданных
по умолчанию пробела и знака табуляции.
tokens=x,y,m-n - определение номеров подстрок, выделяемых из каждой
строки файла и передаваемых для выполнения в тело
цикла. При использовании этого ключа создаются
дополнительные переменные. Формат m-n представляет
собой диапазон подстрок с номерами от m по n. Если
последний символ в строке tokens= является
звездочкой, создается дополнительная переменная,
значением которой будет весь оставшийся текст в
строке после обработки последней подстроки.
usebackq - применение новой семантики, при которой строки,
заключенные в обратные кавычки, выполняются как
команды, строки, заключенные в прямые одиночные
кавычки, являются строкой литералов команды, а
строки, заключенные в двойные кавычки, используются
для выделения имен файлов в списках имен файлов.

Поясняющий пример:

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

эта команда обрабатывает файл myfile.txt, пропускает все строки, которые
начинаются с символа точки с запятой, и передает вторую и третью подстроки
из каждой строки в тело цикла, причем подстроки разделяются запятыми и/или
пробелами. В теле цикла переменная %i используется для второй подстроки,
%j - для третьей, а %k получает все оставшиеся подстроки после третьей.
Имена файлов, содержащие пробелы, необходимо заключать в двойные кавычки.
Для того чтобы использовать двойные кавычки, необходимо использовать
параметр usebackq, иначе двойные кавычки будут восприняты как границы
строки для обработки.

Переменная %i явно описана в инструкции for, а переменные %j и %k
описываются неявно с помощью ключа tokens=. Ключ tokens= позволяет извлечь
из одной строки файла до 26 подстрок, при этом, не допускается
использование переменных больших чем буквы "z" или "Z". Следует помнить,
что имена переменных FOR являются глобальными, поэтому одновременно не
может быть активно более 52 переменных.
----------------------------------------------
пример вроде ничего, может у кого идеи появятся? очень надо :(



Страницы: 1 2 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.009 c
1-27452
oens
2003-09-27 21:23
2003.10.09
Преобразование текстового файла в html


14-27719
Knight
2003-09-19 12:41
2003.10.09
Как окупить затраты на web-проект?


3-27352
DelphiNew
2003-09-19 17:17
2003.10.09
Проблема с интербейз


1-27485
Makhanev A.S.
2003-09-24 00:20
2003.10.09
Как открыть файл через Explorer.....


1-27535
Sensor-x
2003-09-30 00:06
2003.10.09
Как правильно определить время?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский