Hafoom.com

좋은 정보가 정리되어있어서 가져옴...

출처는

 

[출처] [CString 함수]CString을 사용하여 파일 읽기|작성자 헤더막스

 

[출처] [CString 함수]CString을 사용하여 파일 읽기|작성자 헤더막스

 

[출처] [CString 함수]CString을 사용하여 파일 읽기|작성자 헤더막스

 

[출처] [CString 함수]CString을 사용하여 파일 읽기|작성자 헤더막스

 

 

 

CString 을 일반적으로 사용한다던지 또는 DEBUG로 사용할 때는 보통 별 문제 없이 사용이 된다.
하지만, 파일을 Read()하는 것 처럼 큰 데이터를 사용하려 할 때는 아래와 같이 정확히 원하는 만큼의 버퍼를 잡아주고, 사용이 끝나고 난 후에는 버퍼를 해제해 주어야 에러없이 잘 동작한다..
주의하자..!!!!
>>> 참고 : 윈도우 프로그래밍 플러스 : 김은철 저 <<<
LPTSTR GetBuffer(int nMinBufferLength);
--- nMinBufLength : C 형태로 사용할 최소 버퍼의 크기. 현재 CString 버퍼보다 크게 설정하면 CString 버퍼가 그 크기만큼 자동으로 재 설정되며, 작게 설정하면 CString 버퍼 크기가 그대로 유지된다. CString 버퍼를 char*로 변환하는 용도로만 사용한다면 0으로 하면되고, CString 버퍼를 직접 접근하여 문자열을 수정하려면, 최대 문자열 길이 +1 해주면 된다.
--- 반환값 : C 형태로 접근할 수 있는 CString 버퍼의 포인터
LPTSTR GetBufferSetLength(int nNewLength);
--- nNewLength : C 형태로 사용할 버퍼 크기. 현재 CString 버퍼크기보다 크게 설정하면 CString 버퍼가 그 크기만큼 자동으로 재 설정되며, 작게 설정하면 버퍼의 크기는 CString 버퍼크기가 그대로 유지되지만 문자열은 그 크기만 남고 잘려 나간다. CString 버퍼의 char*를 얻으면서 지정된 크기만큼의 문자열만 사용할 때 유용하다.
--- 반환값 : C 형태로 접근할 수 있는 CString 버퍼의 포인터
void ReleaseBuffer(int nNewLength = -1);

사용된 메모리 할당 해제 ->GetBuffer()와 함께 사용
--- nNewLength : 보통 생략. CString 버퍼의 char*를 사용하여 문자열을 수정한 경우 현재 버퍼의 크기를 정확하게 입력해야 한다.
UINT Read(void* lpBuf, UINT nCount);
--- 개방된 파일에서 64K 미만의 텍스트 또는 바이너리를 읽을때 사용
--- 반환값 : 실제 읽혀진 바이트 수
UINT ReadHuge(void* lpBuf, UINT nCount);
--- 개방된 파일에서 64K 이상의 텍스트 또는 바이너리를 읽을때 사용
--- 반환값 : 실제 읽혀진 바이트 수
*** Read, ReadHuge는 텍스트형이나 바이너리형 모두 읽을 수 있다.
*** Read 함수를 상속 받은 클래스에서 파일을 텍스트 모드로 사용시 ("\r\n")은 자동으로 개행문자("\n")로 변환된다
void Write(void* lpBuf, UINT nCount);
--- Read와 반대
void WriteHuge(void* lpBuf, UINT nCount);
--- ReadHuge와 반대

예1 ) GetBuffer, ReleaseBuffer
char* p;
CString str("12345");
p = str.GetBuffer(0); //str문자열 크기만큼 자동할당
....
str.ReleaseBuffer(); //사용해제

예2 ) GetBufferSetLength, ReleaseBuffer
char* p;
p = str.GetBufferSetLength(3); //3바이트 만큼 할당
...
str.ReleaseBuffer(); //사용해제

파일읽기 사용예3 )
DWORD dwLength = tesfile.GetLength();
dwLength = tesfile.ReadHuge(strOldData.GetBufferSetLength(dwLength), dwLength);
strOldData.GetBufferSetLength(dwLength);
strOldData.ReleaseBuffer();
tesfile.Close();

============================================================================

 

[CString관련 함수]

 

함 수

기 능

Length

문자열 길이 변환

Trim

문자열 앞 뒤의 공백을 삭제

TrimLeft

문자열의 왼쪽 공백을 삭제

TrimRight

문자열의 오른쪽 공백을 삭제

UpperCase

문자열 데이터를 대문자로 변환

LowerCase

문자열 데이터를 소문자로 변환

StrReverse

뒤바뀌어진 문자열을 반환

NumericText

문자열이 숫자이면 True 값 반환

ToNumber

문자열을 숫자로 변환

ToText

숫자를 문자열로 변환

ToWords

숫자를 단어로 변환

ReplicateString

인수로 지정한 값만큼 반복 프린트

Space

인수로 지정한 값만큼 공백문자 출력

Instr

문자열에서 다른 문자열의 위치를 반환

InstrRev

문자열에서 다른 문자열의 위치를 반대로 반환

StrCmp

문자열을 비교해서 결과값을 반환

Mid

문자열에서 지정한 만큼 문자열을 반환

Left

문자열의 좌측으로부터 지정된 수의 문자를 반환

Right

문자열의 우측으로부터 지정된 수의 문자를 반환

Val

문자값을 수치로 변환

Chr

아스키 값에 해당하는 문자 출력

Asc

지정한 문자의 아스키 값을 반환

Filter

Replace

Join

Split

 

함 수

기 능

Length

문자열 길이 변환

Trim

문자열 앞 뒤의 공백을 삭제

TrimLeft

문자열의 왼쪽 공백을 삭제

TrimRight

문자열의 오른쪽 공백을 삭제

UpperCase

문자열 데이터를 대문자로 변환

LowerCase

문자열 데이터를 소문자로 변환

StrReverse

뒤바뀌어진 문자열을 반환

NumericText

문자열이 숫자이면 True 값 반환

ToNumber

문자열을 숫자로 변환

ToText

숫자를 문자열로 변환

ToWords

숫자를 단어로 변환

ReplicateString

인수로 지정한 값만큼 반복 프린트

Space

인수로 지정한 값만큼 공백문자 출력

Instr

문자열에서 다른 문자열의 위치를 반환

InstrRev

문자열에서 다른 문자열의 위치를 반대로 반환

StrCmp

문자열을 비교해서 결과값을 반환

Mid

문자열에서 지정한 만큼 문자열을 반환

Left

문자열의 좌측으로부터 지정된 수의 문자를 반환

Right

문자열의 우측으로부터 지정된 수의 문자를 반환

Val

문자값을 수치로 변환

Chr

아스키 값에 해당하는 문자 출력

Asc

지정한 문자의 아스키 값을 반환

Filter

Replace

Join

Split

 

함 수

기 능

Length

문자열 길이 변환

Trim

문자열 앞 뒤의 공백을 삭제

TrimLeft

문자열의 왼쪽 공백을 삭제

TrimRight

문자열의 오른쪽 공백을 삭제

UpperCase

문자열 데이터를 대문자로 변환

LowerCase

문자열 데이터를 소문자로 변환

StrReverse

뒤바뀌어진 문자열을 반환

NumericText

문자열이 숫자이면 True 값 반환

ToNumber

문자열을 숫자로 변환

ToText

숫자를 문자열로 변환

ToWords

숫자를 단어로 변환

ReplicateString

인수로 지정한 값만큼 반복 프린트

Space

인수로 지정한 값만큼 공백문자 출력

Instr

문자열에서 다른 문자열의 위치를 반환

InstrRev

문자열에서 다른 문자열의 위치를 반대로 반환

StrCmp

문자열을 비교해서 결과값을 반환

Mid

문자열에서 지정한 만큼 문자열을 반환

Left

문자열의 좌측으로부터 지정된 수의 문자를 반환

Right

문자열의 우측으로부터 지정된 수의 문자를 반환

Val

문자값을 수치로 변환

Chr

아스키 값에 해당하는 문자 출력

Asc

지정한 문자의 아스키 값을 반환

Filter

Replace

Join

Split

 

ex.CString a=Mid("miae",2)  a=>ae

a=Mid("miae",2,1) a=>a

 

CString a= "ppp.html";

Mid(a.ReverseFind('.')+1)   ==>  html

 

 

 

Find()

int Find( TCHAR ch ) const;

찾을 문자열을 인자로 전달받아 찾은 문자열의 위치정보를 int형의 값으로 리턴합니다

CString str = "abcde";

int n = str.Find('c'); // 요 경우는 2를 리턴합니다(문자열의 첫위치는0)

없는 문자열 'z'를 찾고자 할때는 음수값 -1을 리턴합니다

 

 

ReverseFind(x)

 

int ReverseFind( TCHAR ch ) const;

뒤에서 ch 문자를 찾아서 그 자리를 넘긴다.

CString s( "abcabc" );
int a = s.ReverseFind('b') =>  a=4가 된다.

두번째 a를 찾고자 할때는 다음과 같이 정의할 수 있습니다.

 

n = str.Find('a', 3); // 3의 위치는 d가 되므로 d의 위치부터 탐색을 시작하게 됩니다.

n = str.Find('a', str.Find('a',) + 1);

=>명확히 알 수 없는 경우,

 

 

Length(x)

x는 텍스트 문자열이거나 텍스트 문자열을 가진 필드입니다.

동작

텍스트 문자열이나 문자 데이터 필드의 길이를 반환합니다. 텍스트 문자열의 길이에 의한 조작, 비교, 계산 등에 사용됩니다.

예제

다음 수식에서 Account 문자열의 개수인 7이 반환됩니다.

Length("Account") = 7

다음 수식은 {table.개수} 필드의 값이 14233.08일 때입니다. ToText 함수로 수치를 문자열로 바꾼 다음에 계산하게 됩니다.

Length(ToText({table.개수})) = 8

숫자를 문자로 변환시키는 ToText 함수는 쉼표(또는 천단위 구분자)를 텍스트로 변환하지 않습니다. 숫자 14233.08은 "14233.08"이라는 문자열로 변환되어 문자 길이는 8이 됩니다.

Length("SMITH") = 5

다음 수식에서 BOB와 SMITH 사이의 공백도 문자로 세어집니다.

Length("BOB SMITH") = 9

Trim(x)

x는 문자열입니다.

동작

Trim은 문자열 앞, 뒤의 공백을 제거합니다.

TrimLeft(x)

x는 문자열이거나 오른쪽으로 정렬되어 저장된 데이터 필드입니다.

동작

TrimLeft는 문자열이나 데이터베이스에 오른쪽으로 정렬된 문자열로 저장된 데이터 필드 왼쪽의 모든 공백을 제거합니다.

예제

텍스트 문자열의 정렬, 문자 횟수, 또는 계산(만일 문자열이 결국 숫자로 변환된다면)을 방해하는 선행 공백이 있을 때 이 함수를 사용합니다.

TrimLeft(" Al/4520/B12") = "A1/4520/B12"

TrimRight(x)

x는 문자열이거나 오른쪽으로 정렬되어 저장된 데이터 필드.

동작

TrimRight는 문자열이나 데이터베이스에 왼쪽으로 정렬된 문자열로 저장된 데이터 필드의 오른쪽의 모든 공백을 제거합니다.

예제

텍스트 문자열의 정렬, 문자 횟수, 또는 계산(만일 문자열이 결국 숫자로 변환된다면)을 방해하는 후 행 공백이 있을 때 이 함수를 사용합니다.

TrimRight("Al/4520/B12 ") = "A1/4520/B12"

TrimRight({table.Reference}) = "Bal Fwd."

UpperCase(x)

x는 대문자로 변환하길 원하는 텍스트 문자열입니다.

동작

UpperCase는 텍스트 문자열을 대문자로 바꾸어줍니다. 대문자와 소문자로 이루어진 문자열에서 모든 문자를 대문자로 변환할 수 있습니다.

예제

UpperCase("Description") = "DESCRIPTION"

UpperCase("abc12345") = "ABC12345"

UpperCase("mr " + "bUtler" ) = "MR BUTLER"

LowerCase(x)

x는 데이터 필드에 있는 텍스트 값이거나 텍스트 문자열입니다.

동작

LowerCase는 소문자로 문자 데이터 필드나 텍스트 문자열을 소문자로 변환합니다. 이 함수는 필드가 대문자와 소문자 둘 다 포함하고 있고 일관성을 위해 모든 값을 소문자로 변환하고자 할 때입니다. 문자열 안의 숫자는 LowerCase 함수에 의해 영향을 받지 않습니다.

예제

LowerCase("Description") = "description"

LowerCase("BrEaD " + "AND " + "bUtTeR") = "bread and butter"

StrReverse(InputString)

동작

예제

NumericText(x)

x는 텍스트로 저장된 숫자를 포함하고 있는지를 검사하고자 하는 텍스트 필드입니다.

동작

NumericText는 텍스트 필드의 내용이 숫자인지를 검사합니다.

만일 필드의 전체 내용이 숫자이거나 subscript 연산자를 통해 추출된 문자가 전부 숫자이면 식은 YES 값을 반환합니다. 만일 필드 내용이나 추출된 문자의 일부가 숫자가 아니면 식은 값 NO를 반환합니다.

예제

만일 숫자가 저장된 텍스트 필드를 ToNumber를 사용하여 변환하기에 적당한 지를 확인하기 위해 NumericText를 사용할 수 있습니다.

If NumericText({table.고객코드}) = YES Then

ToNumber{table.고객코드}

ToNumber(x)

x는 텍스트 문자열로 저장된 숫자입니다

동작

ToNumber는 텍스트 문자열을 숫자로 변환합니다.

데이터베이스에서 어떤 숫자는 수치 필드에 숫자로 저장되고 어떤 것은 문자 필드에 텍스트로 저장됩니다. 사용자는 처음 데이터베이스를 설정할 때 필드를 숫자로 할 것인지 텍스트로 할 것인지 결정합니다. 사용자가 계산을 수행하게 될 숫자(항목 단가, 주문한 수량 등)는 일반적으로 수치 필드에 저장되고 계산을 수행하지 않을 숫자(고객번호, 전화번호 등)는 일반적으로 텍스트 필드에 저장됩니다.

예제

ToNumber는 텍스트로 저장된 숫자를 계산에 사용할 수 있는 숫자로 변환하도록 해줍니다. 예를 들면, 만일 항목 번호가 코드화된 제품 정보를 가지고 있고, 계산에 그 정보를 사용하고 싶을 경우 이 함수를 사용할 수 있습니다.

ToNumber("123.45") = 123.45

{table.고객점수} 필드가 문자이고 값이 21385일 때 다음 수식은 True를 반환합니다.

ToNumber({table.고객점수}) < 33333 = TRUE

ToText(x) / ToText(x, #places)

x는 텍스트로 변환되고자 하는 숫자이며 #places는 소수자리의 수를 지정하는 숫자입니다.

동작

ToText는 숫자를 텍스트 문자열로 변환합니다.

텍스트 문자열(폼 문자, 리포트의 주석, 플래그 등)에서 사용될 수 있도록 수치 필드값이나 숫자 계산의 결과를 텍스트로 변환하기 위해 이 함수를 사용할 수 있습니다.

ToText(x, # places)는 숫자를 텍스트 문자열로 변환하고 텍스트로 쓰여질 때 숫자의 소수자리의 수를 지정하도록 해줍니다.

예제

ToText(123.45) = "123.45"

ToText(12345.6749,2) = "12345.67"

ToText(12345.6750,2) = "12345.68"

ToText(12345.5000,0) = "12346"

ToWords(x) / ToWords(x, n)

x는 단어로 변환하고자 하는 숫자입니다. (1 = one, 68 = sixtyeight 등)

n은 결과의 포함된 소수자리의 수입니다.

동작

사용자는 텍스트로 사용될 수 있도록 숫자, 통화 필드값이나 숫자 계산의 결과를 단어로 변환하는데 이 함수를 사용합니다.

음수는 단어 "negative"로 시작합니다.

예제

ToWords(12345) = twelve thousand three hundred fortyfive and xx/100

ToWords(12345,0) = twelve thousand three hundred fortyfive

ToWords(12.3499) = twelve and 35/100

☞ 통화 필드값과 수치 필드값은 같은 방식으로 취급되고 동일한 결과를 산출합니다.

☞ 철자로 표현된 값이 숫자 값보다 훨씬 길기 때문에 새로운 필드 길이를 수용하기 위해 사용자는 필드 상자의 길이를 증가시킬 필요가 있습니다.

ReplicateString(x, n)

x는 문자열이고 n은 정수입니다.

동작

문자열 x를 n번 인쇄합니다. 간단한 막대 그래프를 *를 사용해서 작성하는 경우와 같이 문자열을 삽입하기 위해 이 함수를 사용합니다.

예제

조건에 맞으면 문자 "*" 를 10번 인쇄하는 수식은 다음과 같습니다.

If {table.목표액} < {table.실적} Then

ReplicateString("*",10)

Else

""

다음 수식은 고객점수 결과를 보여주는 막대 그래프를 인쇄합니다. 즉, 수식은 고객 점수 필드에 대해 별표를 인쇄합니다.

{table.고객이름}+ " " + ReplicateString("*", {table.고객점수})

Space(length)

length는 정수입니다.

동작

지정된 수의 공백으로 구성된 값을 반환합니다.

예제

다음 수식은 " "를 반환합니다.

Space(2)

InStr (str1, str2), InStr (start, str1, str2)

str1, str2는 문자열이고, start는 수치입니다.

동작

다른 문자열에서의 위치를 알려 줍니다. 위치를 지정하지 않으면 1이 지정된 것으로 동작됩니다. 만일 0이 반환되면 발견되지 않은 것입니다.

예제

다음 수식에서 2가 반환됩니다.

InStr("abcdefg", "bcd")

InStrRev(InputString)

동작

예제




StrCmp(str1, str2), StrCmp(str1, str2, compare)

str1, str2는 문자열이고 compare는 정수입니다.

동작

문자열 비교의 결과를 의미하는 값을 반환합니다.

str1이 str2 보다 적으면 -1

str1이str2와 같으면 0

str1이str2보다 크면 1

string1 또는 string2 이 Null이면 Null

예제

다음 수식은 1을 반환합니다.

StrCmp("abcd", "aa")

다음 수식은 -1을 반환합니다.

StrCmp ("abcd", "ac")

다음 수식은 0을 반환합니다.

StrCmp ("aa", "aa")

Mid(str, start), Mid(str, start, length)

str은 문자열, start와 length는 수치입니다.

동작

Mid 함수는 한 문자열에서 지정된 수의 문자들을 반환합니다.

예제

다음 수식은 "cd"를 반환합니다.

Mid("abcdef", 3, 2)

Left(str, length)

x는 텍스트 문자열입니다.

동작

지정한 수만큼 문자열의 앞 부분을 반환합니다.

예제

다음 수식에서 "abcd"가 반환됩니다.

Left("abcdefg", 4)

 

->)Mid()

CString Mid( int nFirst ) const;
throw( CMemoryException );

CString Mid( int nFirst, int nCount ) const;
throw( CMemoryException );

 

(예제)

CString stra ="aaaa<bcd>eeeeeeeeee"ff"g";

int nPoint=0, nNextPoint=0;

 

nPoint=stra.Find("<", nPoint);  //0 처음부터 < 있는걸 찾아서 그 자리 값을 nPoint에

 

stra.Mid(nPoint, 3); =><이후부터 3자리 찾으면, bcd 가 되겠졍~


Right(str, length)

str은 문자열이고 length는 정수입니다.

동작

문자열의 우측으로부터 지정된 수의 문자를 반환합니다.

예제

다음 수식은 "efg"를 반환합니다.

Right("abcdefg", 3)

Val(x)

x는 문자열입니다.

동작

Val 함수는 문자열을 수치로 바꾸어줍니다.

예제

다음 수식은 2234100을 반환합니다.

Val("2234 100th Street")

Chr(x)

x는 수치입니다.

동작

Asc 함수의 반대 동작을 합니다. 즉, 수치에 해당하는 문자를 반환합니다.

예제

다음 수식에서 아스키 값 65에 해당하는 A가 반환됩니다.

Chr(65)

ASC(x)

x는 텍스트 문자나 문자열입니다.

동작

텍스트 문자나 문자 데이터 필드의 첫 문자의 아스키 값을 반환합니다.

예제

다음 수식에서 문자 A의 아스키 값인 65가 반환됩니다.

Asc("A") = 65

 

 

'Programming' 카테고리의 다른 글

[펌] CString 함수 정리  (0) 2016.04.25

Comment +0

GPU Memory

분류없음2016.03.18 16:41

 

공부겸 쓰는 것. 잘 모르면서 시부리는 경향이 있음.

대부분 이해+번역이 섞여있음.

또한 요약되어있어 내가 다시 봐도 모를 수 있음.

 

CUDA 관점에서 본 메모리공간은

- Register, local mem 은 thread단위로  R/W 가 가능

- Shared Mem은 block당 R/W 가능

- global mem은 grid단위로 R/W가능.(하나의 app단위로 모든 thread가 정보 공유)

등등... 나머지 constant 나 texture mem은 read만 가능하고, grid단위 접근.

 

 

 

 

Comment +0

 

페르미구조 기반 GPGPU-SIM

reference : https://cvw.cac.cornell.edu/gpu/coalesced?AspxAutoDetectCookieSupport=1

                http://www.umiacs.umd.edu/~ramani/cmsc828e_gpusci/Lecture7.pdf

                http://accel.cs.vt.edu/files/lecture11.pdf

 

Summary.

사실은 잘 모름.

 

Memory Coalescing

nearby or adjacent accesses should be combined.(single transaction). it results being one access and faster.

 

 

GPU의 Hierarchical Mem에서

두가지의 기법이 주요.

- Global memory access에 대한 Coalescing.

- shared memory에 대한 여러 프로세서 접근을 여러개의 bank로.

 

32bit words-64byte transaction.

64bit words-128byte transaction.

128bit words-128byte * 2 transaction.

 

스레드들은 순서대로 half-warp에 접근해야함.

 

Coalescing 기법적용 전에는 아래와 같은 문제.

left side : 순차적인 접근이 아닌 경우. 16개의 transaction 발생.

right side : 순차적이지만 워프내에서 시작포인트가 잘못 됨.

16개의 transaction 발생.

 

 

Coalescing 기법은 이러한 여러 transaction을 1,2개로 바꿔 throughput을 향상.

 

 

Bank Conflict Avoidence.

 

shared memory는 bank conflict만 없으면 거의 register만큼 빠름.

bank conflict는 다른 warp(half warp)간에 일어나지 않음. 같은 warp안에 있는 thread끼리 일어남...

- 하나의 워프에 속한 thread가 다른 뱅크에 간다면 당연히 발생x

- 동일한 곳을 참조하면 그 역시 no conflict. (broadcasting이 있음)

하나의 뱅크에 동시 접근 경우의 cost는 거의 최대치라고 보면 됨.....conflict 계속 발생.

 

Linear addressing.

뱅크를 16개라 치면 s(stride)는 홀수가 되어야 함.

access는 3칸씩 떨어지면서 접근되며,

예를들어 bank index를 0,3,6,9,12,15, 접근한 뒤 2, 5, 8,.... 식으로 접근.

no conflict이다.

 

 

 

 

GPU Optimization Fundamentals

reference : https://www.olcf.ornl.gov/wp-content/uploads/2013/02/GPU_Opt_Fund-CW1.pdf

 

2013년도 업로드된 자료로, 상당히...축약되어 있어서 입문에는 읽기에 이른감이 있음.

 

L1 and L1 cache

- software쪽에선 고려안됨.제어안됨.

 

SM의 Read only data cache

- texture pipeline과 공유됨.

- uncoalesced 된 read 명령어들에 대해 유용함.(why?)

- compiler에 의해 특수한 펑션으로 제어가 가능함.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'MicroArchitecture > GPU' 카테고리의 다른 글

GPU 기초를 쌓자.  (0) 2016.06.23
2016.03.18 Memory coalescing, bank, linear addr  (0) 2016.03.18

Comment +0

티스토리 툴바