Что нового

API аналог функции StringStripCR

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Получаю данные в виде структуры char (str). Есть необходимость убрать из нее все символы CR (Chr(13)) и записать текст в файл. Есть ли API аналог AutoIt-функции StringStripCR, чтобы не делать лишних движений? Искал на MSDN, но не нашел.

Спасибо.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
madmasles [?]
Есть ли API аналог AutoIt-функции StringStripCR, чтобы не делать лишних движений?
Полагаю - нет.

В каком языке планируете использовать? Если AutoIt, то можно побаловаться следующим образом:
Код:
Func _CharArrayStripCR( ByRef $tStruct, $Elem = 1 )
	Local $i = 1, $j = 1, _
		$sByte
	; ---
	While 1
		$sByte = DllStructGetData( $tStruct, $Elem, $i )
		If @Error Then _
			ExitLoop

		If Binary( $sByte ) <> 0x0D Then
			DllStructSetData( $tStruct, $Elem, $sByte, $j )
			$j += 1
		EndIf
		$i += 1
	WEnd
	For $j = $j To $i Step 1
		DllStructSetData( $tStruct, $Elem, 0x00, $j )
	Next
EndFunc


Код:
Func _CharArrayStripCR_2( ByRef $tStruct, $Elem = 1 )
	DllStructSetData( $tStruct, $Elem, StringReplace( DllStructGetData( $tStruct, $Elem ), @CR, '' ) )
EndFunc


Или cpp - на него можно "прямо переписать" первый вариант.
 
Автор
madmasles

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
firex,
Мне тогда проще сделать так.
Код:
;~ =======
$tStruct = DllStructCreate('char[500]')
DllStructSetData($tStruct, 1, 'test string' & @CRLF & 'next string' & @CRLF & 'some str')
;~ =======
$hFile = FileOpen(@ScriptDir & '\test.txt', 2)
FileWrite($hFile, StringStripCR(DllStructGetData($tStruct, 1)))
FileClose($hFile)



Добавлено:
Сообщение автоматически объединено:

firex,
Я написал для себя функцию, используя StrStrI и RtlMoveMemory. Она работает довольно шустро, но в 20-25 раз медленнее, чем штатная StringStripCR (см. код выше). Для небольших текстов разница практически незаметна. Если кому-то интересно, могу ее выложить.
 
Верх