我有一个.txt文件,其内容由空行分隔。
例如
Question1
What is your favourite colour?
Question2
What is your hobby?
Question3
What kind of music do you like?
......等等。
我想将每个文本问题放到一个数组中。
我试过这个
$path=".\Documents\Questions.txt"
$shareArray= gc $path
但它给了我每一行变量。
有人可以给我一个提示吗?
谢谢
答案 0 :(得分:1)
这是一种不同的方法,可以处理多行问题,并且不需要一个单独的空白行。拆分为^Question
,但不排除此文本。输出是Out-Gridview。
## LotPings 2016-11-26
$InFile = ".\Questions.txt"
## prepare Table
$Table = New-Object system.Data.DataTable
$col = New-Object system.Data.DataColumn "QuestionNo",([string])
$Table.columns.add($col)
$col = New-Object system.Data.DataColumn "QuestionBody",([string])
$Table.columns.add($col)
## prepare RegEx for the split
$Delimiter = [regex]'Question'
$Split = "(?!^)(?=$Delimiter)"
(Get-Content $InFile -Raw) -split $Split |
ForEach-Object {
If ($_ -match '(?smi)^(?<QuestionNo>Question\d+)( *)(?<QuestionBody>.*)$') {
$Row = $Table.Newrow()
$Row.QuestionNo = $matches.QuestionNo.Trim()
$Row.QuestionBody = $matches.QuestionBody.Trim()
$Table.Rows.Add($Row)
} else {Write-Host "no Match"}
}
$Table | Out-Gridview
答案 1 :(得分:0)
如果你只想要一个数组,你可以过滤掉最后一行是否import java.util.ArrayList;
import java.util.List;
public class stack {
public List<Integer> list=new ArrayList<>(5);
public void scaleByK()
{
int size=list.size();
for (int i = 0; i < size; i=i+list.get(i))
{
if (list.get(i) < 0 || list.get(i) == 0)
{
list.remove(i);
size--;
}
for (int j = 1; j < list.get(i); j++) {
list.add(i + j, list.get(i));
size++;
}
}
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
public static void main(String arg[]){
stack s1=new stack();
s1.list.add(2);
s1.list.add(4);
s1.list.add(-2);
s1.list.add(5);
s1.list.add(3);
s1.list.add(0);
s1.list.add(7);
s1.scaleByK();
}
:
?
如果您想按前面的名称存储问题,可以使用哈希表。
首先将文件作为单个字符串读取,然后分成两个连续的换行符:
$Questions = Get-Content $path |Where-Object {$_.Trim() -match '\?$'}
如果你想在每个数组项中都有两行,你可以在这里停止。
否则将每个块拆分为&#34;问题名称&#34;和&#34;问题&#34;部分,使用它们来填充哈希表:
$Blocks = (Get-Content $path -Raw) -split '\r?\n\r?\n' |ForEach-Object { $_.Trim() }
现在您可以访问以下问题:
$Questions = @{}
$Blocks |ForEach-Object {
$Name,$Question = $_ -split '\r?\n'
$Questions[$Name.Trim()] = $Question
}
答案 2 :(得分:0)
其他解决方案1
select-string -Path "C:\temp\test.txt" -Pattern "Question[0-1]*" -Context 0,1 |
% {$_.Context.PostContext} |
out-file "c:\temp\result.txt"
答案 3 :(得分:0)
其他解决方案2
$template=@"
{Question*:Question1}
{Text:an example of question?}
{Question*:Question2}
{Text:other example of question with Upper and digits 12}
"@
gc "C:\temp\test.txt" | ConvertFrom-String -TemplateContent $template | select Text
答案 4 :(得分:0)
其他解决方案3
gc "C:\temp\test.txt" | ?{$_ -notmatch 'Question\d+' -and $_ -ne "" }