- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个超过1.5GB的文件,我希望将其分成较小的块以进行一些工作,然后再重新添加。
我有以下脚本,每x行数拆分。该文件可以包含混合使用CRLF和LF分隔符的行。
我要寻找的是按x个CRLF行定界符分割,因为在现有脚本中我可以分割两个完整的数据条目。 CRLF是记录之间的定义定界符,LF存在于自由文本字段中。
注意:下面的代码还将现有的LF转换为CRLF。我希望按照原始格式维护行定界符。
版本是5.1
$sourceFolder_local="D:\FileCleaning\"
$raw = $sourceFolder_local + $file.name
#split test
$sw = new-object System.Diagnostics.Stopwatch
$sw.Start()
$filename = $raw
$rootName = $raw.Replace(".csv","")
$ext = ".csv"
$linesperFile = 100000
$filecount = 1
$reader = $null
try{
$reader = [io.file]::OpenText($filename)
try{
"Creating file number $filecount"
$writer = [io.file]::CreateText("{0}{1}.{2}" -f ($rootName,$filecount.ToString("000"),$ext))
$filecount++
$linecount = 0
while($reader.EndOfStream -ne $true) {
"Reading $linesperFile"
while( ($linecount -lt $linesperFile) -and ($reader.EndOfStream -ne $true)){
$writer.WriteLine($reader.ReadLine());
$linecount++
}
if($reader.EndOfStream -ne $true) {
"Closing file"
$writer.Dispose();
"Creating file number $filecount"
$writer = [io.file]::CreateText("{0}{1}.{2}" -f ($rootName,$filecount.ToString("000"),$ext))
$filecount++
$linecount = 0
}
}
} finally {
$writer.Dispose();
}
} finally {
$reader.Dispose();
}
$sw.Stop()
Write-Host "Split complete in " $sw.Elapsed.TotalSeconds "seconds"
最佳答案
此脚本通过您选择的字符串定界符(例如CRLF)分割文件:
Add-Type -AssemblyName System.Collections
$file = get-item 'D:\test\largefile.txt'
$delimiter = [environment]::NewLine # delimiter to split file
$delimCounter = 5 # split after X occurances of delimiter
$fileReader = [System.IO.StreamReader]::new( $file, [System.Text.Encoding]::default,$true)
$peek = $fileReader.Peek()
$encoding = $fileReader.CurrentEncoding
[void]$fileReader.Close()
[void]$fileReader.Dispose()
switch( $encoding.BodyName ) {
'utf-8' {
$enc = [System.Text.Encoding]::UTF8
break
}
'utf-7' {
$enc = [System.Text.Encoding]::UTF7
break
}
'utf-16' {
$enc = [System.Text.Encoding]::Unicode
break
}
'utf-32' {
$enc = [System.Text.Encoding]::UTF32
break
}
'bigendianunicode' {
$enc = [System.Text.Encoding]::BigEndianUnicode
break
}
'ascii' {
$enc = [System.Text.Encoding]::ASCII
break
}
default {
$enc = $null
}
}
if( $enc ) {
$delimiter = [string]::new( $enc.GetBytes($delimiter) )
}
$fileReader = [System.IO.FileStream]::new( $file, [System.IO.FileMode]::Open )
$delimBuffer = [System.Collections.Generic.List[byte]]::new()
$fileBuffer = [System.Collections.Generic.List[byte]]::new()
$fileCounter = 0
$delimCounter1 = $delimCounter
[void]$delimBuffer.AddRange( [byte[]]0 * $delimiter.Length )
$byte = $fileReader.ReadByte()
while( $byte -ge 0 ) {
[void]$delimBuffer.RemoveAt(0)
[void]$delimBuffer.Add( [byte]$byte )
[void]$fileBuffer.Add( [byte]$byte )
if( [String]::new( $delimBuffer ) -eq $delimiter ) {
$delimCounter1--
if( !$delimCounter1 ) {
# remove last CRLF (if not needed, remove next line)
[void]$fileBuffer.RemoveRange( $fileBuffer.Count - $delimiter.Length, $delimiter.Length )
[System.IO.File]::WriteAllBytes( ($file.DirectoryName + '\' + $file.BaseName + $fileCounter + $file.Extension), $FileBuffer )
[void]$fileBuffer.Clear()
$fileCounter++
$delimCounter1 = $delimCounter
}
}
$byte = $fileReader.ReadByte()
}
if( $fileBuffer.Count -gt 0 ) {
[System.IO.File]::WriteAllBytes( ($file.DirectoryName + '\' + $file.BaseName + $fileCounter + $file.Extension), $fileBuffer )
[void]$fileBuffer.Clear()
}
[void]$fileReader.Close()
[void]$fileReader.Dispose()
关于powershell - 按一定数量的CRLF行定界符分割大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59649215/
我有一列data.frame,其中一些空格应该作为分隔符,而某些只是一个空格。 #input data dat <- data.frame(x=c("A 2 2 textA1 textA2 Z1",
所以我试图分解一个包含答案列表的字符串。 例如:答案:1. 梳理。 2.拇指。 3.坟墓(地下墓穴)。 4. 子宫。 5.面包屑。 6. 炸弹。 7. NumPy 。 8.沉着冷静。 9. 屈服。 有
我有包含多个查询的文件。如何使用 DELIMITER 将它们分开?我像在 mysql 中一样尝试过,但它没有编译: DELIMITER % CREATE SEQUENCE logins_seq I
这个问题在这里已经有了答案: Does -* have any special meaning in regular expression? (1 个回答) 关闭 8 年前。 我有一个像 22 +
我正在尝试使用 sscanf 解析以下字符串: query=testword&diskimg=simple.img 如何使用 sscanf 解析出“testword”和“simple.img”? ss
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示: foo 4.500 bar 3.00 1.3 3 foo bar 如何读取由空格而不是换行符分隔的文件?有什么方法可以设置
这是我的代码: With ad.Tables(2) For i As Integer = 0 To .Rows.Count - 1 If .Rows(i)("name") &
我正在排队,例如 数组大小:4 来自 cin,我想首先检查字符串是否正是这个,然后提取整数。 我找到了读取字符串并提取整数的方法: string start; getline (cin
我正在尝试读取以这种形式编写的文本文件: AB523:[joe, pierre][charlie][dogs,cat] ZZ883:[ronald, zigomarre][pele]
我是 PIG 的新手,有人可以帮助我如何加载一个包含多个字符(在我的例子中为“^^”)作为列分隔符的文件。 例如我有以下列的文件aisforapple^^bisforball^^cisforcat^^
var wrapped_string = "shouldn't this\ work?" JSLint给出了严重的擒纵机构错误。 那么我们如何在 JavaScript 中执行heredoc呢?我有一个
问题:我需要读取 CSV 文件。我使用 FileHelpers 库来实现这一点。 问题是我需要一个动态定界符(用户定义),这意味着任何东西都可以是定界符(逗号、分号、制表符、换行符,以及其他任何东西)
我试图读入一个由 powershell 执行的 sql 文件。一切正常,除了 powershell 因单词定界符而抛出错误。所以我的问题是如何在我的 sql 文件中使用定界符(我只能对 sql 文件进
我需要能够通过 DBI 发出“创建触发器”。我似乎无法使分隔符命令正常工作。任何人都可以找到一种方法来完成这项工作吗? 代码: use strict; use DBI; my $dbargs = {m
我知道我可以使用 Mustache.tags('[[', ']]'); 更改默认分隔符 我深入研究了源代码,但找不到也不知道如何更改不转义 HTML 定界符,默认情况下为 {{{ }}}。感谢您的帮助
我正在尝试获取 std::string 值并将其用作 std::getline() 函数中的分隔符但无论我做什么,编译器都会给我错误。这就是我想要做的: std::stringstream ss(s)
我正在尝试实现我自己的 beanstalkd 客户端作为学习围棋的一种方式。 https://github.com/kr/beanstalkd/blob/master/doc/protocol.txt
我正在编写一个显示代码和输出的样式指南。它目前的结构使得代码只需要描述一次,并以其原始版本和解释版本显示,如下所示: #{ image_tag 'image.png' } PLACE_THE
是否可以将默认字段分隔符从逗号更改为其他字符,例如用于导出的 '|'? 最佳答案 下面是一个使用选项卡的示例。 到一个文件: CSV.open("myfile.csv", "w", {:col_sep
我是一名优秀的程序员,十分优秀!