Помогите написать скрипт

Russian main discussion
  • Author
  • Message
Offline
Posts: 381
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

Skif_off, VladSh
Спасибо!

Offline
Posts: 381
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

Стоит задача относительно заданного пути создать несколько подпапок, вложенных одна в другую. В принципе на Jscript решается так:

Code: Select all

// Здесь
// initalPath - путь, внутри которого надо сделать подпапки
// subFolders - список подпапок в виде массива

function createSubFolders(initalPath, subFolders) {
	var fso = new ActiveXObject("Scripting.FileSystemObject");
	var length = subFolders.length;
	var i;

		for (i = 0; i < length; i++) {
			initalPath = initalPath + subFolders[i] + "\\";
			if ( fso.FolderExists(initalPath) ) {
				continue;
			} else {
				fso.CreateFolder(initalPath);
			}
		}
}

Любопытно, есть ли какой способ избежать цикла (может какими-то внутренними средствами AkelPad можно) чтобы в функцию сразу передать нужный путь в виде строки наподобие "initalPath\subfolder1\subfolder2\" ?

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Шелловский костыль SHCreateDirectoryEx

Offline
Posts: 381
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

FeyFre
Там для С++, это не то, да и не все версии винды поддерживают.

Ладно, пусть будет цикл, так понятнее..

YuS
Offline
Posts: 512
Joined: Sun Sep 15, 2013 8:25 am
Location: 013 в Тентуре, семь по Спирали, налево от Большой Медведицы

Post by YuS »

Cuprum wrote:FeyFre
Там для С++, это не то, да и не все версии винды поддерживают.

Ладно, пусть будет цикл, так понятнее..
Не совсем понятно, зачем AP должен выполнять функции не свойственные редактору, но ведь там вроде бы есть

Code: Select all

AkelPad.Exec
и в винде достаточно просто создать необходимый набор подпапок, например так:

Code: Select all

md .\1\2\3\4\5
Может быть это то, что требуется?

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Cuprum

Code: Select all

if (AkelPad.Exec("cmd /c md c:\\a\\b\\c\\d", "", 1))
  WScript.Echo("Error");

Offline
Posts: 381
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

YuS
Не совсем понятно, зачем AP должен выполнять функции не свойственные редактору, но ведь там вроде бы есть
Пожалуй да, редактору это вряд ли надо.

YuS, KDJ спасибо за способ, узнал новое. Все-таки останусь на цикле, а то тут командное окно мельтешит ;)

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Cuprum
To hide console window, you can use Run method of WshShell object:

Code: Select all

var WshShell = new ActiveXObject("WScript.Shell");
if (WshShell.Run("cmd /c md c:\\a\\b\\c\\d", 0 /*hide window*/, 1 /*return error*/))
   WScript.Echo("Error");

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Cuprum, честное слово, ты как первый раз замужем.

Code: Select all

var oSys = AkelPad.SystemFunction();
oSys.Call("shell32::SHCreateDirectoryEx" + _TCHAR, 0/*или AkelPad.GetMainWnd()*/, "диск:\\путь\\к\\каталогу\\вася\\пупкин\\штрих\\который\\нужно\\создать", 0);

Offline
Posts: 4
Joined: Sun Mar 15, 2015 8:16 pm

Прошу помочь.

Post by aleksey.k »

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

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

aleksey.k
1. UPD: удалено
2. Переформулируйте ТЗ. Мне, например, не удалось понять о каких таких смещениях идет речь.

Offline
Posts: 4
Joined: Sun Mar 15, 2015 8:16 pm

Post by aleksey.k »

Простите, что неясно выразился.

Речь о "смещение в символах". Нужно автоматически пересчитать всё количество символов (в том числе и таких как, например "перевод строки", то есть тотально всё) от начала каждой новой строки и вывести в новое окно только цифры: строка-количество символов в строке; следующая строка плюс предыдущая, и так далее...

Должно выглядеть так, допустим в первой 9 символов и символ перевода строки, далее 10 + количество символов следующей строки и так далее:

10
133
284

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

aleksey.k
Simple script for not too large files:

Code: Select all

var aLine  = AkelPad.GetTextRange(0, -1).split("\r");
var nTotal = 0;
var sText  = "";
var i;

for (i = 0; i < aLine.length; ++i)
{
  nTotal += aLine[i].length;
  if (i < aLine.length - 1)
    ++nTotal;
  sText += nTotal + "\r";
}

AkelPad.Command(4101 /*IDM_FILE_NEW*/, 1 /*lParam*/);
AkelPad.ReplaceSel(sText);

Offline
Posts: 4
Joined: Sun Mar 15, 2015 8:16 pm

Thank you

Post by aleksey.k »

KDJ
Это просто изумительно. Всё именно так как я себе представлял. Огромная благодарность. :)
Thank you so much.

Offline
Posts: 366
Joined: Mon Jan 10, 2011 5:28 pm
Contact:

Post by Lenchik »

aleksey.k, расскажите, пожалуйста, для каких задач такой скрипт оказывается полезен? А то мало ли, вдруг стоит добавить себе в коллекцию.
Post Reply