找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 41017|回复: 20

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

[复制链接]
发表于 2023-4-4 11:19:59 | 显示全部楼层 |阅读模式
我想把下面的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);
复制代码
发表于 2023-4-4 12:46:06 | 显示全部楼层
你是不会c++还是不会ps呢?c++起码到循环还是非常简单的 为什么不去花上10分钟学一下呢?
https://www.runoob.com/cplusplus/cpp-for-loop.html
发表于 2023-4-4 12:47:38 | 显示全部楼层
你这里面也没有函数变量的介绍 光看几行注释谁知道是干啥的?
发表于 2023-4-4 12:56:09 | 显示全部楼层
这几行是这个编辑器给代码加缩进 char space[1024];就是搞出一个字符串,memset(space,' ',1024);就是把字符串的前1024(就是所有)填充为空格,第十四行的nIndent鬼知道是个啥
 楼主| 发表于 2023-4-4 13:19:35 | 显示全部楼层
回复 4# jyswjjgdwtdtj


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

上面那个for后面都在一个()括号中, 什么意思呢
 楼主| 发表于 2023-4-4 13:23:01 | 显示全部楼层
回复 4# jyswjjgdwtdtj

nIndent 是缩进值
上面的语句如何改成ps代码?
期待同时精通C++和PS的大佬指个明路
 楼主| 发表于 2023-4-4 13:26:44 | 显示全部楼层
这个for为什么没有{...}语句呢?
发表于 2023-4-4 14:47:07 | 显示全部楼层
回复 7# 小白龙
  1. for([init];[condition];[[increment],[[statement1],statment2]……]);
复制代码
=
  1. for([init];[condition];increment){
  2. statement1;
  3. statement2;
  4. ……
  5. }
复制代码
明白了吗?
 楼主| 发表于 2023-4-4 18:01:17 | 显示全部楼层
回复 8# jyswjjgdwtdtj


    多谢指导, 貌似懂了, 但是改成ps代码还是行不通
发表于 2023-4-4 18:41:39 | 显示全部楼层
回复 9# 小白龙


    ps怎么可能没有循环!?
发表于 2023-4-4 18:42:56 | 显示全部楼层
这些语言都是一家门 起码for长得一毛一样!
网上随便搜了个例子

  1. for($x=1; $x -lt 10; $x=$x+1)   
  2. {   
  3. echo $x   
  4. }
复制代码
 楼主| 发表于 2023-4-5 14:09:04 | 显示全部楼层
本帖最后由 小白龙 于 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.             }
复制代码
发表于 2023-4-5 15:35:46 | 显示全部楼层
回复 12# 小白龙


    ps是真的学不进去 那个指令语句实在难以接受真心帮不了你了
还有sendeditor是个啥函数?
 楼主| 发表于 2023-4-5 16:07:09 | 显示全部楼层
回复 13# jyswjjgdwtdtj

已经很感谢了,

发送消息的函数
发表于 2023-4-5 18:29:31 | 显示全部楼层
问chatgpt试试
参考提问的智慧,切换不同的问法,多问几次
当他能理解你在问什么的时候,嘶
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 23:23 , Processed in 0.020881 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表