기존 FAME 데이터베이스 파일에서 적절한 문자 설명을 얻으려고합니다. 기본적으로 이것은 작동하지만 움라우트 등은 올바르게 인쇄되지 않습니다. 기본적으로이 R Package FAME
에 포함 된 다음 C 함수는 R 질문보다 C 질문입니다.올바른 움라우트 문자를 포인터에서 char로 반환 하시겠습니까?
void fameWhat(int *status, int *dbkey, char **objnam, int *class,
int *type, int *freq, int *basis, int *observ,
int *fyear, int *fprd, int *lyear, int *lprd,
int *obs, int *range,
int * getdoc, char **desPtr, char **docPtr){
/* Get info about an object. Note that range should be an int[3] on input */
int cyear, cmonth, cday, myear, mmonth, mday;
int i;
char fdes[256], fdoc[256];
if(*getdoc){
if(strlen(*desPtr) < 256 || strlen(*docPtr) < 256){
*status = HBNCHR;
return;
}
for(i = 0; i < 255; ++i) fdes[i] = fdoc[i] = ' ';
}
fdes[255] = fdoc[255] = '\0';
cfmwhat(status, *dbkey, *objnam, class, type, freq, basis, observ,
fyear, fprd, lyear, lprd, &cyear, &cmonth, &cday, &myear,
&mmonth, &mday, fdes, fdoc);
if(*getdoc){
strncpy(*desPtr, fdes, 256);
strncpy(*docPtr, fdoc, 256);
}
if(*status == 0 && *class == HSERIE)
cfmsrng(status, *freq, fyear, fprd, lyear, lprd, range, obs);
return;
}
는 느낌 인해 포인터가 R에서이 함수를 호출하고, R 콘솔 내에서 결과를 표시 할 때 내가 어떤 적절한 움라우트을하지 않는 유형 char
입니다 설명을 가리키는 desPtr
를 포인터에 있다는 사실에 . 나는 FAME이 Latin-1로 인코딩 된 것을 보았습니다. R은 UTF-8입니다. ä
의 경우 예를 들어 \U3e34653c
이됩니다.
C에서 이미 끝내서 R에 적절한 값을 전달하는 방법이 있습니까? 아니면 R 내에서 검색하고 바꾸어야합니까?
참고 :이 스레드는 Using Unicode in C++ source code이고이 How to use utf8 character arrays in c++?입니다.
+1 파일 형식 링크입니다. 얼마나 긴 문자열을 얻었습니까? 좋은 질문. 레거시 db FAME에는 C 인터페이스가 있습니다. 그래서 위의 함수를 사용하여 db에 액세스하여 설명을 얻습니다. 나는 모든 C 함수를 다시 사용할 수있는 R을 사용하여 함수에 액세스하고 R이 스크립팅 언어이기 때문에 결과를 다시 대화식으로 제공합니다. 이것은 이러한 움라우트를 제외하고 일반적으로 잘 작동합니다. 나는 왜 내가 iconv 등이 고칠 수없는 것을 얻는 지 모르겠다. –
@Matt : 아마도이 간단한 인코딩을 위해 함수에서 입력 문자열을 스캔하여 발견 된 16 진수 시퀀스를 적절한 UTF8로 변환해야합니까? – usr2564301
은 C 함수를 수정하거나 오히려 처리하는 것을 의미합니까? 예를 들어 줄 수 있습니까? 나는 오히려 여기에 데이터/통계/R 남자 야 :) –