Post

파이썬 한글 글자수 체크 및 특정 단어 갯수 찾기

묘하게 파이썬 한글 글자수 체크하는 방법이 잘 안나온다.

쉬운거 같은데 기록을 안하는 느낌이다.

아무튼 아래는 파이썬 한글 글자수 체크 및 특정 단어 갯수 찾는 소스코드 예제.

흐름은 간단하다.

1) 파일을 연다
2) 파일을 단어 list for문으로 돌리면서 원하는 단어 갯수를 체크한다.

3) 텍스트의 갯수를 체크한다.

(다만 한글과 비교했을때 한글 글자수가 정확히 표시되지 않는다.

좀 적게 표시는되는 거 같아서 한 900자면 1200자 쓰고...

이렇게 어림짐작해야함)

4) 출력한다

import os
from collections import Counter
import re  # 정규 표현식 모듈을 import 해야 합니다

file_path = ''
file_name = 'text.txt'

search_word = ["단어1", "단어2"] # 크기 2개. 배열 아래랑 똑같이 맞춰야함
search_word_count = [0, 0] # 크기 2개. 배열 위랑 똑같이 맞춰야함
search_word_len = len(search_word) #range는 2면 0, 1만 돔

#파일 열고 단어 찾고 글자수 세기
def fileopen(data): 
    with open(file_path + file_name,'r',encoding='UTF8') as file:
        text = file.read()
        
        #단어 찾고 개수 카운팅
        for i in range(search_word_len) :
            print(search_word[i]+" count:"+str(text.count(search_word[i])))
            print("text11111:"+text)
            text.count(search_word[i])
            search_word_count[i] += text.count(search_word[i])
        
        splitdata = text.split()
        
    file.close()
    
    #공백, 특수문자 제거하고 눈에 보이는 글자수를 체크
    #우가 2바이트, 앙이 3바이트 뭐 이렇게 된다고 함
    #korean_letters = re.findall(r'[가-힣]', text)
    #return splitdata, len(korean_letters)
    
    #공백, 특수문자 포함 글자수체크
    #정확하지 않음. 한글2020이랑 비교하면 다름. 1200자정도 쓰면 1000자 넘을 듯... 수정해야함
    return splitdata, len(text)
   
splitdata, count = fileopen(file_path + file_name)


print("******* result *******:")
print("글자수:"+str(count))

for i in range(search_word_len) :
    print(str(search_word[i]) + " count: " + str(search_word_count[i]))

Post

import os

file_path = '.\\pic'
file_names = os.listdir(file_path)
file_new_name = "사진이름변경"

i = 1
for name in file_names:
    src = os.path.join(file_path, name)
    dst = file_new_name + str(i) + '.jpg'
    dst = os.path.join(file_path, dst)
    os.rename(src, dst)
    i += 1

python 폴더 내 파일 이름 변경

간단한 예제.

1) cmd 창을 켜고 해당 python 코드가 있는 폴더로 이동

2) py python파일이름.py

이렇게 실행하면 된다.

파일이름+숫자.....로 생성된다.

Post

원래 나는 티스토리에 여러가지 투자에 대한 이야기를 적었다.
예금넣었다 채권에다가 투자를 했다 한번 발행어음을 투자해 봤다 등등등...
부동산에 관한 이야기도 살짝 했었다.
그런데 어느 순간부터 그런 글을 적을수가 없었다.
왜 그런가 해서 봤더니 계엄령때문에 은행에서 돈을 빼는데 그거때문에 좀 현타가 온 것 같다.
은행뿐만 아니라 채권도 엄청 해지 했고 아무튼 다음 날 개 운영때문에 은행이 문을열지 않을까봐
부랴부랴 돈을 빼 버렸는데 지금와서는 후회가 되면서도 어쩔 수 없었다는 생각에 무기력에 잠긴 것 같다.
일단 은행에 돈 뺀거는 살짝 슬 프지만 후회 하진 않는다.
정말 운이 좋아서 계엄령이 해제 되고 그 날 주식장도 열리고 운행도 문을 연 거지...
계엄령이라면은 원래 전부 다 전산이 마비 되고 전기도 끊기고
그런 무시무시한 사태가 일어날 수 있기 때문이다.
아무튼 이율 4%로 굉장히 괜찮은 채권도 가지고 있었는데
전부 빼 버려서 뭔가 주절주절 하는거에 의미가 없다고 느껴졌다.
좀더 생산성 있는 일을 하고 싶고 좀 더 돈이 되는 일을 하고 싶고
한번 좌절 같은걸 겪으니 약간 무념무상의 진 것 같다 .
게다가 요즘 은행 이자도 영 재미가 없....
채권때문에 투자는 못하겠어서 딱히 재밌는 일이 일어나지도 않는다 .
하여튼 다른 이야기를 적을 지도 모르겠지만 일단 투자는 보류다

Post

한글 백업 파일 불러오기

나는 딱히 한글 자동 백업 체크를 한 적이 없는데 잘 불러와졌다.

내 한글 백업 파일 위치: C:\Users\user\AppData\Local\Temp

나는 이렇지만(나도 기본설정이지만) 각자 기본 설정을 다르게 하면 폴더 위치가 달라질 수 있다.

한글 백업 파일 폴더 위치 찾는법은

한글 2022이고 맨 위에 x 창 옆에 ? 를 클릭-한글정보-폴더정보-임시 폴더 위치를 확인하면 된다.

그러면 그 중 tmp파일을 찾아서 hwp 확장자로 바꾸면 끝!

날아갔던 한글 파일이 돌아왔다 ㅠㅠ만세 ㅠㅠ

한글 백업 파일 불러오기 끝!

Post

cocos2dx app key 서명

android에서는 안되길래 검색하다보니

keytool 을 사용하는 방법이 있었다.

https://cafe.naver.com/cocos2dxusers/26291

 

[3.6]윈도우에서 이클립스 없이 안드로이드 APK 빌드하기(release버전)

안녕하세요.주말에도 열심히 개발중인 악당캉아쥐라고 합니다. 'ㅁ'/[ 시작하며 ]항상 많은 도움을 얻다가 이번에 한가지 알게 된 것이 있어서 공유하려고 합니다.제가 코코스를 ...

cafe.naver.com

 

https://developer.android.com/tools/publishing/app-signing.html

 

앱 서명  |  Android Studio  |  Android Developers

앱 서명 및 보안과 관련된 중요한 개념을 알아보고, Android 스튜디오를 사용하여 Google Play에 출시하기 위해 앱에 서명하는 방법과 Play 앱 서명을 선택하는 방법을 알아보세요.

developer.android.com

정리를 하자면

C:\Program Files\Java\jre1.8.0_202(각자 설치된 jre 버전)

여기까지 cmd로 들어와서 keytool 명령어를 사용한다.

keytool -genkey -v -keystore 앱이름 -alias 별명 -keyalg RSA -keysize 2048 -validity 10000

(위 명령어는 잘못된 거. 아래에 올바른 옵션 찾았음)

keytool 은(는) 내부 또는 외부 명령 실행할 수 있는 프로그램 또는 배치 파일이 아닙니다

라고 뜬다.

jdk가 깔려 있지 않아서... java가 없어서라고 하는데 난 깔려 있는데?ㅁ?

환경 변수 설정을 아래와 같이 해주었지만

C:\Program Files\Java\jdk1.8.0_202\bin;

jdk-17 폴더가 설치되어있고 거기에 keystore가 있어서 추가로 해주기로 했다.

jdk-17이랑 jdk1.8.0 이랑 숫자단위가 다른걸로봐서

각자 다른 곳?에 쓰이는 별개의 jdk인거 같고...예전에 그런식으로 이해해는데

지금은 뭐였는지 정확히 기억안남 ㅠㅠ

아무튼 추가

C:\Program Files\Java\jdk-17\bin

다시 cmd 켜고 시도하니까 된다. 아 이 때 cmd는 반드시 관리자 권한으로 실행! 안그러면 변경할 수 없다고 뜨더라...

keystore 명령어는 인식한다. 이제 비번이나 이름, 지역 등등.. 기타를 넣어준다.

비밀번호같은 건 잘 저장해둔다.

생성완료!

근데

[poetryapp.keystore을(를) 저장하는 중]

Warning:
JKS 키 저장소는 고유 형식을 사용합니다. "keytool -importkeystore -srckeystore poetryapp.keystore -destkeystore poetryapp.keystore -deststoretype pkcs12"를 사용하는 산업 표준 형식인 PKCS12로 이전하는 것이 좋습니다.

으음?

경고는 떴지만

C:\Program Files\Java\jdk1.8.0_202\bin 에 보면 keystore 파일이 만들어져 있다.

그러면 이제 release 빌드를 한다(debug x)

cocos compile 프로젝트 이름 -p android -m release

그러면

Please input the absolute/relative path of '.keystore' file:

근데 난 잘 맞게 넣었는데 왜 The string inputed is not a file! 라고 떠?

알고보니 full경로를 적어줘야한다.c:\ 부터 시작하는 그거... ./ 현재 폴더라거나 키스토어파일 이름만 덜렁 올리면 안된다.

아무튼 그러면 debug보다는 좀 더 시간이 오래걸려서

release 파일 생성 완료...가 되면 좋은데 실패했다.

왜죠?

 Failed to read key poetryapp from store "poetryapp.keystore": Cannot recover key

보호되지 않은 키라고?

찾아보니 pkcs12 형식으로 마이그레이션 하라고 뜸. 경고가 그런 의미였나...

file or directory 'project\proj.android\app\libs', not found

lib 폴더를 찾을 수 없다고 뜨는데 이건 괜찮나??

아무튼 pkcs12 형식으로 만들기 도전

keytool -genkey -v -keystore 이름.keystore -storetype pkcs12 -alias 별명 -keyalg RSA -keysize 2048 -validity 10000

proj.android\app\build.gradle 파일 열기.

android 내에 keystore 이름을 새로 만든걸로 변경해준다.( proj.android\app\build.gradle에서 기존 key이름이 저장되어 있어서 이걸 변경해줘야함)

여기서 스토어 파일 이름이랑 비밀번호랑 다 새로운 key로 바꿔주면 됨!!

드디어 key 서명한 relase 빌드 성공!

Post

android 가로모드에서 세로로 변경

android 프로젝트를 키고 app폴더에서 AndroidManifest.xml 파일 열기

android:screenOrientation
찾은 다음 landscape portrait 로 변경

 

android 앱 아이콘 변경

하려고했는데...아어...나 바보같이 GRADLE 업그레이드했다ㅠㅠㅠ

업그레이드하면 안되는데...아놔...미친..바보...탱이

아무튼 

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
그레이들 버전이 지원안된다는 그런 에러가 발생했고...
근데 gradle 버전 업그레이드야 그냥 프로퍼티에 버전 변경정도라서 gradle-wrapper.properties의 distributionUrl

build.gradle에서 dependencies { classpath 를 변경해주니까 해결!!
gradle 다운 그레이드 쉽다!

아무튼 이제 진짜 아이콘 변경!!!

왼쪽창 Android 모드에서 app>>res>>폴더에 가면 mipmap-hdpi, mipmap-mdpi 등....

각각 화소에 맞는 아이콘이 있다. png 이미지를 원하는대로 바꿔주면 된다.

프로젝트 이름 변경

 

한글 글자 깨짐

cocos2dx는 한글 출력하는 것도 어렵다.

윈도우 빌드는 잘되었는데 앱 빌드 후 apk 실행 시 한글이 와장창 깨진다 ㅠㅠ

검색해보니 나처럼 한글 출력이 잘 안되는 경우가 많았다.

일단 좀 특이한 한글 폰트를 사용하고 있어서 네이버 나눔 고딕으로 변경해봤는데 안됨!!!

그 후 검색으로....

https://cafe.naver.com/cocos2dxusers/26663

char testString[30];
WideCharToMultiByte(CP_UTF8, 0, L"테스트 테스트", -1, testString , 30, NULL, NULL);
auto label = Label::createWithTTF(MyString, "fonts/fontname.ttf". 24);

를 하면된다고 했는데 android 앱 빌드시 에러.

illegal character encoding in string literal

아마 WideCharToMultiByte 이라는게 윈도우 함수여서 앱 빌드에서는 그게 안되는거 같다. 찾아보니까 android에서는 utf 관련 변환이 자동적으로 안된다고 하는것 같기도 하고...?

그렇게 더 찾아보다가

페이지 인코딩을 바꿔주라고 적혀 있었다.

https://grr1.tistory.com/17

 

VS2017 파일생성 인코딩 UTF-8 기본값으로 설정하기

이글을 작성하게된 계기는 VS2017에서 clang 컴파일러 사용시 error : illegal character encoding in string literal 오류를 경험하시는분들에게 해결책이 되지않을까 싶어서 올려봅니다 저같이 15시간정도 고통

grr1.tistory.com

https://m.blog.naver.com/raveneer/221755491661

그러고보니 예전에 한글 출력안되어서 페이지 인코딩 바꾸었는뎅...

새 프로젝트 만들어서 그런지 페이지 인코딩이 한국어다.

notepad로 cpp 한글 나오는 파일만 utf-8 bom으로 바꾸었다.(노가다ㅠ)

아무튼 그렇게 하고 빌드하니까 잘된다!!

 

android 앱 이름 변경

projectname\proj.android\app\res\values

폴더에서 strings.xml 을 연 다음에 프로젝트 이름을 변경해주면 된다.

 
간단한 앱 만드는것도 왜 이렇게 힘드냐ㅠㅠ 
애증의 cocos2dx 부글부글...

Post

Cococs2dx build Failed (CMakeLists.txt 수정)

오랜만에 빌드했는데 에러가 났다

Build MyGame armeabi-v7a
externalNativeBuildDebug: Executable : C:\Users\user\AppData\Local\Android\Sdk\cmake\3.6.4111459\bin\cmake.exe
arguments :
--build
H:\CocosProject\project\proj.android\app\.externalNativeBuild\cmake\debug\armeabi-v7a
--target
MyGame
jvmArgs :
Executable : C:\Users\user\AppData\Local\Android\Sdk\cmake\3.6.4111459\bin\cmake.exe
arguments :
--build
H:\CocosProject\project\proj.android\app\.externalNativeBuild\cmake\debug\armeabi-v7a
--target
MyGame
jvmArgs :
:project:externalNativeBuildDebug (Thread[Task worker for ':',5,main]) completed. Took 3.45 secs.
FAILURE: Build failed with an exception.  

clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation)
  ninja: build stopped: subcommand failed.

BUILD FAILED in 4s
41 actionable tasks: 1 executed, 40 up-to-date
VCS Checkout Cache (proj.android\.gradle\vcsWorkingDirs) has not been cleaned up in 0 days
Error running command, return code: 1.

일단 블로그에서 안드로이드 세팅했던기억이 있어서 이거보구있음

https://m.blog.naver.com/karlose7/221484046370

 

[Cocos2d-x] 안드로이드 스튜디오 포팅에 관하여

안녕하세요, 마그입니다. "Cocos2d-x"엔진 게시글을 첫 글로 저를 굉장히 괴롭혔던 "안드...

blog.naver.com

그러다가 가장중요한거!!

프로젝트 폴더 바로 안에 CMakeLists.txt 파일

# add cross-platforms source files and header files 
list(APPEND GAME_SOURCE

소스코드에 내가 만든 소스코드 전부 넣어줘야하는거 깜빡함!!
헤더 cpp 각자 소스 코드 이름 넣어줘야함

이 방법이 번거롭다면 재귀로 불러오는 방법이 있다고한다

https://blog.naver.com/njh0602/221507313152)

 

[Cocos2d-x 3.x] 안드로이드 빌드 설정 시 CMakeLists.txt에 빌드할 소스 한 번에 추가하기

현재 cocos2d-x 측에서 안드로이드 스튜디오를 통한 C++ 소스 빌드를 하기 위한 방법으로 ndk +...

blog.naver.com

다음과 같은 형태로 사용하라고 하심
file (GLOB_RECURSE MY_SOURCES Classes/*.cpp)
file (GLOB_RECURSE MY_SOURCES Classes/*.h)

list(APPEND GAME_SOURCE ${MY_SOURCES})
list(APPEND GAME_HEADER $MY_HEADERS})

파일 많아지면 시도해보는걸로!!

 

H:\CocosProject\project\bin\debug\android 폴더 안에 apk 빌드 확인!

(그런데 안드로이드 서명은 어떻게 하는거지???? 나 android studio는 전혀 사용안하는데...옛날에 서명했던거 같은데 다 까먹었다 ㅠㅠ)

Post

onTouchBegan replaceScene 에러

아직도 정확한 에러 원인은 모르겠지만 기록.A, B 씬 이동을 왔다갔다 하는데 이 때 배경을 터치하면 다른 화면으로 이동한다.유독 B씬에서 A로 넘어갈때 크래시가 났다. 디버그가 안된다고 스택도 안뜨고..그러다가 간간히 아래와 처럼 떴다.

baseproject.exe![thunk]:GameScene::`vcall'{688,{flat}}' }'() C++
  libcocos2d.dll!std::_Func_class<int,enum cocos2d::ui::Widget::FocusDirection,class cocos2d::ui::Widget *>::operator()(enum cocos2d::ui::Widget::FocusDirection,class cocos2d::ui::Widget *) C++
  libcocos2d.dll!cocos2d::EventDispatcher::EventListenerVector::~EventListenerVector(void) C++
  libcocos2d.dll!std::_Hash<class std::_Umap_traits<float,class std::vector<class cocos2d::Node *,class std::allocator<class cocos2d::Node *> >,class std::_Uhash_compare<float,struct std::hash<float>,struct std::equal_to<float> >,class std::allocator<struct std::pair<float const ,class std::vector<class cocos2d::Node *,class std::allocator<class cocos2d::Node *> > > >,0> >::_Range_eraser::_Bump_erased(void) C++
  libcocos2d.dll!std::_Func_class<float,float>::operator()(float) C++
> libcocos2d.dll!cocos2d::EventDispatcher::dispatchTouchEventToListeners(class cocos2d::EventDispatcher::EventListenerVector *,class std::function<bool (class cocos2d::EventListener *)> const &) C++
  libcocos2d.dll!cocos2d::EventDispatcher::dispatchTouchEvent(class cocos2d::EventTouch *) C++
  libcocos2d.dll!cocos2d::EventDispatcher::dispatchEvent(class cocos2d::Event *) C++
  libcocos2d.dll!cocos2d::GLView::handleTouchesBegin(int,int * const,float * const,float * const) C++
  libcocos2d.dll!cocos2d::GLViewImpl::onGLFWMouseCallBack(struct GLFWwindow *,int,int,int) C++
  libcocos2d.dll!cocos2d::GLFWEventHandler::onGLFWMouseCallBack(struct GLFWwindow *,int,int,int) C++
  libcocos2d.dll!__glfwInputMouseClick() C
  libcocos2d.dll!_glfwGetWin32Window() C
  user32.dll!764215fb() 알 수 없음
  [아래 프레임이 누락 및/또는 올바르지 않음, user32.dll에 대해 로드된 기호가 없음]
  [외부 코드]

dispatchTouchEvent 라고 적혀 있으니까 터치 이벤트에 관한 건가 싶어서

씬 생성 부분을 빨리 만들어주기도 하고... 여러모로 해봤으나 실패.그냥 버튼으로 하자고 해서 했더니 에러가 없었다.아무곳에나 터치X 그냥 버튼으로 하는게 답인가 싶다.

Post

Cocos2dx Change Scene 화면전환 예제

replaceScene: 화면이 전환될 때 메모리를 해제한다. 메모리가 해제되긴 하지만 메모리를 해제해서 이전 상태값 저장이 되지 않는다.

HelloWorldScene.h

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"

USING_NS_CC;


class HelloWorld : public LayerColor
{
public:
    static cocos2d::Scene* createScene();
    
    virtual bool init();
    
    // implement the "static create()" method manually
    CREATE_FUNC(HelloWorld);

    void changeScene(Ref* sender);
};

#endif // __HELLOWORLD_SCENE_H__

HelloWorld.cpp

#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"
#include "GameScene.h"

USING_NS_CC;

Scene* HelloWorld::createScene()
{
    auto scene = Scene::create();

    auto layer = HelloWorld::create();
    scene->addChild(layer);

    return scene;
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    if (!LayerColor::initWithColor(Color4B(0, 0, 255, 255))) {
        return false;
    }

    auto item = MenuItemFont::create("Game Scene", CC_CALLBACK_1(HelloWorld::changeScene, this));

    auto menu = Menu::create(item, NULL);
    menu->alignItemsHorizontally();
    this->addChild(menu);
   
    return true;
}

void HelloWorld::changeScene(Ref* sender) {
    Director::getInstance()->replaceScene(GameScene::createScene());
}

GameScene.h

#ifndef __OTHER_SCENE_H__
#define __OTHER_SCENE_H__

#include "cocos2d.h"

USING_NS_CC;

class GameScene : public Layer {
public:
	static Scene* createScene();

	virtual bool init();
	CREATE_FUNC(GameScene);
};

#endif

GameScene.cpp

#include "GameScene.h"

Scene* GameScene::createScene() {
	auto scene = Scene::create();

	auto layer = GameScene::create();
	scene->addChild(layer);

	return scene;
}

bool GameScene::init() {
	if (!Layer::init()) {
		return false;
	}

	return true;
}

Post

엑셀에서 이름 만들고 참조하기

엑셀에서 이름을 만들면 어느 시트에 있던 링크 클릭 한번으로 바로 찾아갈 수 있다.

행열의 위치가 바뀌더라도 지정된 이름으로 찾아갈 수 있는게 포인트.

즉 위치가 바뀌어도 상관없이 원래 내가 지정한 위치로 갈 수 있다!!!

방법

1. 이름을 만들어야 한다. 이름을 만들 열하나를 오른쪽 마우스 클릭. 이름 정의. 그리고 원하는 이름을 넣으면 된다(한글 가능)

2. 그리고 원하는 곳에 이동 링크를 만들면 된다. 이동 링크는 오른족 클릭-링크-현재문서 에서 정의된 이름을 찾으면 된다.

그러면 셀 위치가 바뀌어도 안전하게 참조가 가능하다.

▲ top