我有一个函数,它应该检索文本文件中的修订号。文本文件如下所示:
componentname1:123456
componentname2:234567
第二部分是一个数字,表示颠覆修订号。 powershell脚本逐行读取此文件,然后使用此函数处理每一行:
function getRevision($line) {
$line -match ":(?<revision>[0-9]*)"
$result = $Matches['revision']
Write-Host "Found component revision '$($result)'"
return $result
}
处理函数getRevision
时,它会给出输出
Found component revision '111499'
此函数由另一个函数调用:
$rev = getRevision($Line)
# ....
someOtherFunction -Revision "$($rev)"
在这个someOtherFunction
中,我现在得到这个输出:
Handle component with revision 'True 111499'
修改
我添加了函数someOtherFunction
的基本代码:
function someOtherFunction {
param(
[Parameter(Mandatory=$True)]
[String]$Revision
)
Write-Host "Handle component with revision '$($Revision)'"
}
现在,问题出现了:为什么会有这个True
的东西?我的错误在哪里?
答案 0 :(得分:2)
如果这是您的源数据的形成方式,即冒号分隔的键值对。我认为ConvertFrom-StringData
会删除所有&#34;复杂性&#34;从这个问题。但它需要&#34; key = value&#34;所以我们需要进行一些小改动,最后,你将整个文件作为哈希表。
如果该样本数据位于名为c:\ temp \ file.txt
的文件中$revisions = (Get-Content -Raw C:\temp\file.txt) -replace ":","=" | ConvertFrom-StringData
$revisions['componentname1']
如果存在数据错误的风险,您可以通过仅处理具有冒号的行来执行一些基本过滤:
$data = (Get-Content C:\temp\file.txt | Where-Object{$_ -match ":"}) -replace ":","=" | Out-String | ConvertFrom-StringData
$data['componentname1']
答案 1 :(得分:1)
关键字True
来自函数第一行的-match
运算符
$line -match ":(?<revision>[0-9]*)"
如果在函数内部执行-match
,则会将其输出(二进制值)自动添加到函数的输出中,然后将$result
添加为第二个元素。因此,如果您检查$rev
的值,您会看到:
PowerShell> $rev
True
123456
如果您想摆脱第一个元素,只需将其传递给Out-Null
:
$line -match ":(?<revision>[0-9]*)" | Out-Null
编辑:正如Matt所指出的,如果$line
与模式不匹配,则可能会返回意外结果(上次成功匹配)。为了防止这种情况,你可以使用:
if ($line -match ":(?<revision>[0-9]*)") {
$result = $Matches['revision']
Write-Host "Found component revision '$($result)'"
return $result}
else {return $false}
在这种情况下,Out-Null
不需要-match
,if
内you can do it by define method
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
if(action == MotionEvent.ACTION_DOWN){
// ...
}else if(action == MotionEvent.ACTION_UP){
// ...
startAnimation();
return true;
}else if(action == MotionEvent.ACTION_MOVE){
// ...
}
return false;
}
public void run(){
int start = (int)mMainData.getY();
int end = (int)mTargetData.getY();
mScroller.startScroll(0, start, 0, -Math.round(mMainData.getY() - end), 500);
while(canAnimate()){
while(mScroller.computeScrollOffset()){
mMainData.setY(mScroller.getCurrY());
postInvalidate();
}
stopAnimation();
}
}
private void startAnimation(){
mThread = new Thread(this);
mThread.start();
}
private void stopAnimation(){
animate = false;
}
private boolean canAnimate(){
return animate == true;
}
条件未添加到输出中。