Delphi相当于VB“Space”

时间:2013-03-26 14:13:38

标签: string delphi

Visual Basic“Space”函数返回由指定数量的空格组成的字符串。

Visual Basic示例:

Property Get Sections() As String
Dim sBuf As String
Dim iSize As String
Dim iRetCode As Integer
    sBuf = Space$(8192)
    iSize = Len(sBuf)
    iRetCode = GetPrivateProfileString(0&, 0&, m_sDefault, sBuf, iSize, m_sPath)
    If (iSize > 0) Then
        Sections = Left$(sBuf, iRetCode)
    Else
        Sections = ""
    End If
End Property

“太空”的Delphi等价物是什么?感谢。

3 个答案:

答案 0 :(得分:6)

要回答直接问题,最接近的等价物是StringOfChar

sBuf := StringOfChar(' ', 8192);

虽然如果你将问题中的代码翻译成Delphi,你就不会用空格填充字符串。 VB代码在分配字符串时实际上并不感兴趣,它只是使用Space$作为分配特定长度的字符串的简单方法。这些空格将被API调用返回的字符串覆盖。

在Delphi中,您可以通过编写:

来分配长度为8192的字符串
SetLength(sBuf, 8192);

实际上在Delphi中,您可以使用TIniFile从INI文件中读取。因此,如果你真的试图翻译问题中的代码,我建议你不要这样做,而是使用Delphi的内置库。

答案 1 :(得分:3)

您可以使用StringOfChar

// set txt to 80 spaces
txt := StringOfChar(' ', 80);

答案 2 :(得分:-1)

或者您可以使用此功能..

 function FastDupeCharA(Chr:Char;n:integer):string;assembler;
asm
 PUSH EBX
 PUSH ESI
 PUSH EDI
 XOR EBX,EBX

 MOV BL,AL
 MOV EDI,ECX
 MOV EAX,ECX
 MOV ESI,EDX
 XOR ECX,ECX
 CALL SYSTEM.@LSTRSETLENGTH
 MOV EDI,[EDI]

 MOV BH,BL  {Fill EBX  with BL (Char)}
 PUSH BX
 SHL EBX,16
 POP BX

 CMP ESI,8
 JLE @DupCarefully
 MOVD MM0,EBX
 PUNPCKLWD MM0, MM0

 @NextFill:
 MOVQ [EDI], MM0  {Fill 8 Char}
 ADD EDI,8
 SUB ESI,8
 CMP ESI,8
 JGE @NextFill
 EMMS
 TEST ESI,ESI
 JNE @DupCarefully
 JMP @FIN

 @DupCarefully:
 {If n or esi is smal than 8 }
 MOV [EDI],BL
 DEC ESI
 JE @FIN
 MOV [EDI+1],BL
 DEC ESI
 JE @FIN
 MOV [EDI+2],BL
 DEC ESI
 JE @FIN
 MOV [EDI+3],BL
 DEC ESI
 JE @FIN
 MOV [EDI+4],BL
 DEC ESI
 JE @FIN
 MOV [EDI+5],BL
 DEC ESI
 JE @FIN
 MOV [EDI+6],BL
 DEC ESI
 JE @FIN
 MOV [EDI+7],BL
 DEC ESI
 JE @FIN
 MOV [EDI+8],BL
 DEC ESI
 JE @FIN

 @FIN:
 MOV EAX,[EDI]
 POP EDI
 POP ESI
 POP EBX
 end;