[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 求助解惑PowerShell的for语句

我想把下面的C++ 语句转成Powershell, 但是不太理解下面一些语句:
第6到第8行的for语句
这for循环格式怎么是这样的, 是什么含意? 改成ps应该怎么改?

还有第12到第14行的语句
这几行的主要是实现什么功能? 第14行赋值是什么意思? 改成ps应该怎么改?

这些行中的函数在powershell应该不存在, 这里假设是存在的, 求路过大佬指导, 多谢
  1.                     // 得到上一行缩进设置
  2.                     int nIndent = SendEditor(SCI_GETLINEINDENTATION,line-1);
  3.                     // 查找上一行最后一个有效字符(非空白字符)
  4.                     int nPrevLinePos = SendEditor(SCI_POSITIONFROMLINE,line-1);
  5.                     int c = ' ';
  6.                     for(int p = pos-2;
  7.                         p>=nPrevLinePos && isspace(c);
  8.                         p--, c=SendEditor(SCI_GETCHARAT,p));
  9.                     // 如果是左括号,就多缩进四格
  10.                     if(c && strchr("{([<",c)) nIndent+=4;
  11.                     // 缩进...
  12.                     char space[1024];
  13.                     memset(space,' ',1024);
  14.                     space[nIndent] = 0;
  15.                     SendEditor(SCI_REPLACESEL, 0, (sptr_t)space);
复制代码

回复 4# jyswjjgdwtdtj


    感谢大佬指导, 对PS和C++都不太懂

上面那个for后面都在一个()括号中, 什么意思呢

TOP

回复 4# jyswjjgdwtdtj

nIndent 是缩进值
上面的语句如何改成ps代码?
期待同时精通C++和PS的大佬指个明路

TOP

这个for为什么没有{...}语句呢?

TOP

回复 8# jyswjjgdwtdtj


    多谢指导, 貌似懂了, 但是改成ps代码还是行不通

TOP

本帖最后由 小白龙 于 2023-4-5 14:13 编辑

回复 11# jyswjjgdwtdtj

感谢指导, 还是搞不定,
上面的代码出自下面的链接
https://blog.csdn.net/yntcsb/article/details/83570675
  1.             int pos = SendEditor(SCI_GETCURRENTPOS); //取得当前位置
  2.             int line = SendEditor(SCI_LINEFROMPOSITION,pos); //取得当前行
  3.             //如果最后输入的字符是右括号的话就自动让当前行缩进和它匹配的左括号所在行一致
  4.             if( strchr("})>]",LastProcessedChar) &&
  5.                 isspace(SendEditor(SCI_GETCHARAT,pos-2)) && //要求右括号左边是空白字符
  6.                 LastProcessedChar!=0)
  7.             {
  8.                 //找前一个单词起始位置,这里用它来确定右括号左边是否全是空白字符
  9.                 int startpos = SendEditor(SCI_WORDSTARTPOSITION,pos-1,false);
  10.                 int linepos = SendEditor(SCI_POSITIONFROMLINE,line); //当前行起始位置
  11.                 if(startpos == linepos) //这样相当于判断右括号左边是否全是空白字符
  12.                 {
  13.                     int othpos = SendEditor(SCI_BRACEMATCH,pos-1); //得到对应的左括号所在的位置
  14.                     int othline = SendEditor(SCI_LINEFROMPOSITION,othpos);  //左括号所在行
  15.                     int nIndent = SendEditor(SCI_GETLINEINDENTATION,othline);//左括号所在行的缩进值
  16.                     // 替换右括号前面的空白字符,使之与左括号缩进一致
  17.                     char space[1024];
  18.                     memset(space,' ',1024);
  19.                     SendEditor(SCI_SETTARGETSTART, startpos);
  20.                     SendEditor(SCI_SETTARGETEND, pos-1);
  21.                     SendEditor(SCI_REPLACETARGET,nIndent,(sptr_t)space);
  22.                 }
  23.             }
  24.             // 如果输入的是回车,则保持与上一行缩进一致
  25.             // 如果上一行最后有效字符为左括号,就多缩进四个空格
  26.             if(LastProcessedChar == ' ')
  27.             {
  28.                 if(line > 0)
  29.                 {
  30.                     // 得到上一行缩进设置
  31.                     int nIndent = SendEditor(SCI_GETLINEINDENTATION,line-1);
  32.                     // 查找上一行最后一个有效字符(非空白字符)
  33.                     int nPrevLinePos = SendEditor(SCI_POSITIONFROMLINE,line-1);
  34.                     int c = ' ';
  35.                     for(int p = pos-2;
  36.                         p>=nPrevLinePos && isspace(c);
  37.                         p--, c=SendEditor(SCI_GETCHARAT,p));
  38.                     // 如果是左括号,就多缩进四格
  39.                     if(c && strchr("{([<",c)) nIndent+=4;
  40.                     // 缩进...
  41.                     char space[1024];
  42.                     memset(space,' ',1024);
  43.                     space[nIndent] = 0;
  44.                     SendEditor(SCI_REPLACESEL, 0, (sptr_t)space);
  45.                 }
  46.             }
复制代码

TOP

回复 13# jyswjjgdwtdtj

已经很感谢了,

发送消息的函数

TOP

回复 15# idwma

不会用chatgpt

TOP

回复 17# idwma

多谢大佬帮助, 这也太厉害了
能给个注册使用gpt的链接吗, 找了几个链接都不行

TOP

回复 20# Five66


    多谢大佬, 我找到了一个只有几十行代码就可以给9种编程语言着色的组件, 但是遇到点问题, 我新发一个贴子讨论

TOP

返回列表