.gz 파일을 열고 압축 해제를 위해 청크로 읽습니다.문자열 캐스팅 후 문자열 레코드 구분 기호가 손실됩니다.
비 압축 파일의 데이터는 다음과 같습니다. aRSbRScRSd, 각 레코드 (내 더미 예제 a, b, c의 레코드) 사이에는 레코드 구분 기호 (ASCII 코드 30)가 있습니다.
File file = File(mylog.gz, "r");
auto uc = new UnCompress();
foreach (ubyte[] curChunk; file.byChunk(4096*1024))
{
auto uncompressed = cast(string)uc.uncompress(curChunk);
writeln(uncompressed);
auto stringRange = uncompressed.splitLines();
foreach (string line; stringRange)
{
***************** Do something with line
상기 코드의 결과는 다음 ABCD 불행히도 기록 분리기 (ASCII 30)는 누락된다.
ubyte []를 문자열로 변환 한 후 데이터 레코드 구분 기호가 누락 된 것을 알게되었습니다.
내가 코드에서 변경해야합니까는 레코드 분리를 유지하기 :
지금 나는 두 가지 질문이 있습니까?
루프를 사용하지 않고 위의 코드를 작성하려면 어떻게해야합니까? 나는 한 줄씩 읽고 싶다.
편집
첫 번째 질문에 대한 좀 더 일반적이고 이해할 수있는 코드 :
ubyte[] temp = [ 65, 30, 66, 30, 67];
writeln(temp);
string tempStr = cast(string) temp;
writeln (tempStr);
결과는 다음과 같습니다 바람직하지 ABC.
결과가 ABC입니까? 배열의 값 30도 문자로 캐스팅되며 [ASCII 30] (http://www.theasciicode.com.ar/ascii-control-characters/record-separator-ascii-html)에서와 같이 인쇄 가능한 문자가 아닙니다. code-30.html) – xtreak
나는 또한 두 개의 서로 다른 소프트웨어에서 작은 샘플을 확인했습니다 : Windows cmd, 디스플레이는 괜찮아요, 또 다른 소프트는 'ABC'입니다. 문자열을 표시하기 위해 어느 소프트를 사용합니까? 실제로는 디스플레이 문제 일 뿐이지 만 파싱 오류가 있다고 생각하는 것은 불가능하다고 생각합니다. –