반응형

 

 

 

grid를 분할할수있는 RowDefinition과 분할 영역을 자유롭게 바꿀수있는

gridsplitter를 c# 코드적으로 생성하는 법을 기록해봄

 

이 방법을 응용하면 columndefinition에도 적용이 가능하다

 

 

gridsplitter란

진짜 말그대로 grid 영역 늘였다 줄였다 가능한 선

 

 

 

예시 grid

대충 사용하려는 grid는 위와같다

 

 

 

 

 

코드 영역을 주석으로 대강 설명해둔 코드들

mainGrid.RowDefinitions.Add(new RowDefinition
{
    //auto, star pixel로 Row의 height 지정 가능 
    Height = GridLength.Auto,
    
    //Height = new GridLength(1, GridUnitType.Star), 
    //1* 또는*과 같은듯 2*을 하고 싶다면 아래와 같이 적으면 됨
    //Height = new GridLength(2, GridUnitType.Star), 
    
    MinHeight = 15
    // 생성된 Row가 갖는 최소한의 높이 영역 값이 커질수록
    //각 Row가 갖는 영역의 height가 높아진다/넓어진다
});

height를 auto로 잡지 않으면 gridsplitter로 영역을 재분배해도 보이지않는 한계가 생긴다

만약 row가 3개이고 height 값들이 다 1*인 경우,

1을 3으로 나눈 영역까지만 이동되는 그런거

 

 

 

 

얇은 선으로 생겨서 마우스로 드래그하여grid 영역 조절이 가능한 gridsplitter

GridSplitter splitter = new GridSplitter()
{	
    //gridsplitter 선을 그리드 row 영역의 맨 위에 오게 함
    VerticalAlignment = VerticalAlignment.Top,
    
    //Row 영역에 gridsplitter를 생성하는 경우 stretch 속성을 사용하여
    //가로를 꽉차게 해주는 듯하다    
    HorizontalAlignment = HorizontalAlignment.Stretch,
    
    //ResizeBehavior 이건 조금 헷갈리는데 위아래로 그리드 영역을 넓히고 줄이고 싶으면
    //PreviousAndNext 이 값을 사용하면 되는듯 몇개의 값들이 더 있긴 한데
    //그건 본인 상황에 따라 다르게 쓰면 되겠다
    ResizeBehavior = GridResizeBehavior.PreviousAndNext,
    
    //gridsplitter 선 색
    Background = new SolidColorBrush(Colors.LightPink),
    
    //gridsplitter 두께
    Height = 5
};

 

 

	
    //메인 그리드에 생성한 splitter들을 추가해준다
    mainGrid.Children.Add(splitter);
    mainGrid.Children.Add(splitter2);
	
    //나는 각 컬럼 별 생성한 gridsplitter를 다르게 사용할 것이므로 다음과 같이
    //그리드의 Row 영역에 덧붙여 줬다
    Grid.SetRow(splitter, mainGrid.RowDefinitions.Count - 1);
    Grid.SetColumn(splitter, 0);

    Grid.SetRow(splitter2, mainGrid.RowDefinitions.Count - 1);
    Grid.SetColumn(splitter2, 1);

동적으로 생성한 gridsplitter를 메인으로 사용할 그리드에 추가하는 방법

 

 

 

아래는 최종 본 cs 코드

//추가한 gridsplitter 위아래로 자유롭게 이동됨, gridsplitter 잘 추가됨
private void addRow_Click(object sender, RoutedEventArgs e)
{
    mainGrid.RowDefinitions.Add(new RowDefinition
    {
        //auto, star pixel로 사이즈 지정 가능 
        Height = GridLength.Auto,
        //Height = new GridLength(1, GridUnitType.Star),
        MinHeight = 15
    });

    GridSplitter splitter = new GridSplitter()
    {
        VerticalAlignment = VerticalAlignment.Top,
        HorizontalAlignment = HorizontalAlignment.Stretch,
        ResizeBehavior = GridResizeBehavior.PreviousAndNext,
        Background = new SolidColorBrush(Colors.LightPink),
        Height = 5
    };

    GridSplitter splitter2 = new GridSplitter()
    {
        VerticalAlignment = VerticalAlignment.Top,
        HorizontalAlignment = HorizontalAlignment.Stretch,
        ResizeBehavior = GridResizeBehavior.PreviousAndNext,
        Background = new SolidColorBrush(Colors.LightGray),
        Margin = new Thickness(0, -8, 0, 0),
        Height = 20
    };

    mainGrid.Children.Add(splitter);
    mainGrid.Children.Add(splitter2);

    Grid.SetRow(splitter, mainGrid.RowDefinitions.Count - 1);
    Grid.SetColumn(splitter, 0);

    Grid.SetRow(splitter2, mainGrid.RowDefinitions.Count - 1);
    Grid.SetColumn(splitter2, 1);


    mainGrid.RowDefinitions.Add(new RowDefinition
    {
        Height = new GridLength(1, GridUnitType.Star)
    });
}

 

 

 

사용한 xaml 코드

<ScrollViewer>
    <Grid x:Name="mainGrid" Background="Salmon" Height="1500">
        <Grid.RowDefinitions>
            <RowDefinition Height="*" MinHeight="25"/>                
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="0*" MinWidth="30" />
            <ColumnDefinition Width="0*" MinWidth="30" />
        </Grid.ColumnDefinitions>
        <Button x:Name="addRow" Click="addRow_Click" Width="40" Panel.ZIndex="12" Height="50" VerticalAlignment="Top">추가</Button>        
    </Grid>
</ScrollViewer>

현재 grid의 height의 경우 고정된 값으로 주었기때문에 동적으로 재조절해서 사용하면 되겠다

 

 

실행 예시

 

 

 

 

 

 

msdn 참고

 

출처 : https://social.msdn.microsoft.com/Forums/vstudio/en-US/8f9ad61f-3af6-44ef-a1a7-e14c8c323852/how-to-programmatically-create-and-attach-a-gridsplitter-to-a-grid?forum=wpf 

 

how to programmatically create and attach a GridSplitter to a Grid?

thx for the tip, but I trying to use stuffs mean for the Grid, unless the custom-tool behave as like the vanilla GridSplitter within the Grid, its really not feasible for me to pick on another 3rd party tool for the project.

social.msdn.microsoft.com

 

반응형
반응형

html 페이지에서 메뉴를 선택하고 선택한 정보를 출력하고 싶어서 사용해본 셀렉트 태그

아래의 빈 공백은 텍스트입력하는 input 태그이므로 신경안써도됨

 

 

 

html

<select class="form-control" id="menu" name="menu" required>
    <option value="" disabled selected>메뉴</option>
    <option value="boong">붕어빵</option>
    <option value="tako">타코야키</option>
    <option value="ddang">땅콩과자</option>
    <option value="other">그 외 간식</option>
</select>

 

select 태그에 required 속성을 덧붙여주면 해당 셀렉트 태그의 선택이 필수 선택으로 지정된다

 

나중에 form 형식에 셀렉트 태그를 넣은 다음 서버로 정보를 전달할 때 쏠쏠함

회원가입 경우, *필수 입력 정보가 필요할 때 쓰면된다

 

 

위의 이미지를 바탕으로 기록해보면

메뉴에 대해서 반드시 옵션 값을 선택해야하며, 메뉴라고 적혀있는 옵션 값은 선택이 불가능하다

각각의 메뉴의 value 값은 자바스크립트에서 데이터를 얻어올 때 유용하게 쓰인다

 

사용자에게 보여질 텍스트는 옵션 태그 사이에 넣어주면 된다

 

 

javascript

async function register(){
	var menu = document.getElementById("menu").value;
	console.log("선택한 메뉴 : "+menu);
}

위의 코드처럼 작성해보면 선택한 메뉴를 출력해볼 수 있다

저장이 필요하다면 위의 방식처럼 옵션의 value에 접근하여 저장하거나 데이터를 가공하면 되겠다

 

 

 

좀더 고급지게 작성할 수 있는데 일단 제일 쉽고 간단한 방법을 사용했음

다양한 방법을 덧붙인 사용을 원하면 아래 mdn 참고하자

 

 

참고 : https://developer.mozilla.org/ko/docs/Web/HTML/Element/select#attr-disabled

 

<select> - HTML: Hypertext Markup Language | MDN

HTML <select> 요소는 옵션 메뉴를 제공하는 컨트롤을 나타냅니다.

developer.mozilla.org

 

반응형
반응형

 

 

 

[javascript] 카카오맵 지도 API 사용하는법 (1.키 발급)

카카오맵 API를 사용해서 웹이나 어플리케이션에 지도 서비스를 이용할 때 첫단계 과정을 기록해봄 카카오맵 API를 사용할 도메인 등을 추가해주어 지도 API에서 접근이 가능한 키 발급을 받으면

studyingpingu.tistory.com

 

 

기존에 작성해본 카카오맵 API 지도 사용법 다음과정 작성해봄

작성해야지 해야지하다가 거의 한 분기가 지나고 다음 글을 쓰는내가 레전드

 

 

일단 API 키를 발급 후 도메인 등록까지 마쳤으면 지도를 띄우는 과정 중 절반은 해낸거나 마찬가지임

그게 없으면 아예 지도를 띄울수없응게

 

다음과정은

html에 발급받은 API key를 넣고 카카오맵 api를 호출하는 자바스크립트를 호출해준다

html div에 지도 map을 추가해준 다음, 자바스크립트 코드에 map 객체를 생성해주면 끝

 

 

*API 키는 카카오에 등록한 사용자가 맞다는 일종의 인증 방법

 

 

 

대충 글로 적어본 과정은 위와같으며 아래는 코드에 적용한 방법

 

 

 

html

<!DOCTYPE html>
<html lang="en">
<head>

    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>

    <title>페이지 타이틀。</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
</head>

<body>

    <div id="map" style="width:700px;height:500px;"></div>

    <script src="js/jquery.js"></script>
    <script type="text/javascript" src="js/jquery.ajax-cross-origin.min.js"></script>

    <!-- 기본 지도 app key -->
    <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=APP API KEY=발급받은 키 입력&libraries=services"></script>

    <!-- 기본 지도 기능에서 클러스터 추가 사용 -->
    <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=APP API KEY&libraries=services,clusterer,drawing"></script>

    <script type="text/javascript" src="index.js"></script>

</body>

</html>

위처럼 html 파일을 작성하면 width 너비가 700, height 높이가 500인 지도를 웹페이지에 표출할수있다

(아래 자바스크립트 코드도 작성해야됨)

 

지도를 사용자 디바이스 너비에맞게 css를 조절하는게 좀 까다로웠는데

일단 지도 띄우는것만 시도해보는 것이므로 그냥 고정값을 줘봤다

+아래에 변형해본 css를 추가해보았으니 참고해서 응용해보자

 

 

기본 지도 app key 부분은 카카오맵 지도 api에서 제공하는 기본적인 기능을 사용할 때 호출하는 방식이고

 

아래의 기본지도 기능에서 클러스터를 추가했다는 부분은 지도 api에서 제공하는 기능들 중 

좀더 심화된 기능을 사용할 때 사용한다

 

따라서 기본적인 지도의 경도 위도, 주소등의 정보만 이용할 때는 서비스만 사용해도 되고,

지도 데이터를 시각화하거나 지도 위에 뭔가 그려내고자 할 때는 아래의 ,clusterer,drawing 를 추가해주면 된다

 

javascript

//지도 생성에 사용
var map;
var mapContainer;

window.onload = function() { 	
	mapContainer = document.getElementById('map'), // 지도를 표시할 div 
	mapOption = {
		center: new kakao.maps.LatLng(37.566826, 126.9786567), // 지도의 중심좌표
		level: 3 // 지도의 확대 레벨
	};  

	// 지도를 생성합니다    
	map = new kakao.maps.Map(mapContainer, mapOption); 
}

페이지가 로드될 때 지도 객체를 새로 생성하게 함

 

페이지가 로드되고, 생성된 지도에 클릭 이벤트, 지도 위 마커 생성 등 지도의 기능을 계속 사용하기 위해

전역으로 map, mapcontainer를 선언하여 사용했다

 

mapOption 객체

center는 경도 위도 좌표를 주고 지도를 생성할 때 디폴트로 열리는 위치를 선언함

level 지도의 확대, 축소된 정도 (1~14까지 가능, 1이 최대 확대된 정도)

 

 

 

지도 클러스터 기능 예시

 

이런식으로 지도에 묶어서 보여줄수있는게 클러스터(집단) 기능

 

 

 

아래는 내가 임의로 css를 이것저것 추가해보고 지도 사이즈를 내가 사용하기 적합하게 바꾼 내용

 

/* 지도 */
.map_wrap {
position:absolute; overflow:hidden; width:100%;
height:1024px;
}

사실 높이부분이 아직도 마음에 안드는데 이건 내가 위아래에 다른 요소를 추가한다고 찌그러진거라

일단 너비는 위와같이 참고하면 디바이스 너비에맞게 100%를 유지한다

 

이 css를 적용하려면 html map에 style 대신 class="map_wrap"를 적용해주면 됨

 

그럼 지도 요소가 화면 너비에 맞게 유지된다

 

 

참고 :

 

https://apis.map.kakao.com/web/guide/

 

반응형
반응형

요즘은 눈이 부셔서 폰이나 PC화면을 배경색이 어두운 다크모드로 거의 사용하고 있다보니까

내가 만든 웹사이트도 어둡게 보였으면 해서 찾아본 배경 글자 반전 다크모드

 

반전 예제

 

css

/* 다크모드 */
.dark-mode {
  background-color: #3e3a3a;
  color: white;
}

참고로 여기서 사용한 배경색은 완전한 검정색은 아니고 조금 진한 먹색

 

 

javascript

//다크모드
function useDarkMode() {
  var element = document.body;
  element.classList.toggle("dark-mode");
}

window.onload = function() { 	
	useDarkMode();
	
}

위의 코드처럼 작성을 해두면

css랑 자바스크립트만 수정해줘도 다크모드 사용이 가능하다

 

대신 동적으로 생성되는 객체들은 적용되는게 좀 차이가 있을수있다

 

 

나는 버튼 클릭 없이 아예 웹페이지가 열릴때 자동으로 다크모드를 실행하고 싶어서 위의 코드처럼 작성함

 

버튼클릭으로 배경 글자색을 반전하는 다크모드는 아래의 w3schools 참고하자

 

 

이 방식 말고도 되게 다양하게 다크모드를 적용할수있는데

나는 이방법이 제일 간단해서 일단 이렇게 사용했음

 

 

참고 : 

 

https://www.w3schools.com/howto/howto_js_toggle_dark_mode.asp

 

How To Toggle Between Dark and Light Mode

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 

반응형
반응형

 

 

문자열을 취급하는 문제를 풀때 많이 마주치는 아스키코드

문자열 문제에서도 알파벳의 개수를 세거나, 알파벳의 위치를 계산해야할 때 주로 사용하는데

 

매번 찾아보기 귀찮아서 블로그에 박제해둠

 

 

 

 

먼저, 아스키코드란

 

미국 정보교환 표준부호 (영어: American Standard Code for Information Interchange),

줄여서 ASCII( /ˈæski/, 아스키)는

영문 알파벳을 사용하는 대표적인 문자 인코딩이다.

 

아스키는 7비트 인코딩으로, 33개의 출력 불가능한 제어 문자들

공백을 비롯한 95개의 출력 가능한 문자들로 총128개로 이루어진다.

 

제어 문자들은 역사적인 이유로 남아 있으며 대부분은 더 이상 사용되지 않는다.

출력 가능한 문자들은 52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자,

그리고 하나의 공백 문자로 이루어진다.

 

 

 

표준 아스키코드 표 (Standard character set : 32~127)

영어로 적혀있지만 웬만한 기호만으로도 검색이 가능하니 이대로 사용하면 됨

 

 

DEC OCT HEX BIN Symbol HTML Number HTML Name Description
32 040 20 00100000   &#32;   Space
33 041 21 00100001 ! &#33;   Exclamation mark
34 042 22 00100010 " &#34; &quot; Double quotes (or speech marks)
35 043 23 00100011 # &#35;   Number
36 044 24 00100100 $ &#36;   Dollar
37 045 25 00100101 % &#37;   Per cent sign
38 046 26 00100110 & &#38; &amp; Ampersand
39 047 27 00100111 ' &#39;   Single quote
40 050 28 00101000 ( &#40;   Open parenthesis (or open bracket)
41 051 29 00101001 ) &#41;   Close parenthesis (or close bracket)
42 052 2A 00101010 * &#42;   Asterisk
43 053 2B 00101011 + &#43;   Plus
44 054 2C 00101100 , &#44;   Comma
45 055 2D 00101101 - &#45;   Hyphen
46 056 2E 00101110 . &#46;   Period, dot or full stop
47 057 2F 00101111 / &#47;   Slash or divide
48 060 30 00110000 0 &#48;   Zero
49 061 31 00110001 1 &#49;   One
50 062 32 00110010 2 &#50;   Two
51 063 33 00110011 3 &#51;   Three
52 064 34 00110100 4 &#52;   Four
53 065 35 00110101 5 &#53;   Five
54 066 36 00110110 6 &#54;   Six
55 067 37 00110111 7 &#55;   Seven
56 070 38 00111000 8 &#56;   Eight
57 071 39 00111001 9 &#57;   Nine
58 072 3A 00111010 : &#58;   Colon
59 073 3B 00111011 ; &#59;   Semicolon
60 074 3C 00111100 < &#60; &lt; Less than (or open angled bracket)
61 075 3D 00111101 = &#61;   Equals
62 076 3E 00111110 > &#62; &gt; Greater than (or close angled bracket)
63 077 3F 00111111 ? &#63;   Question mark
64 100 40 01000000 @ &#64;   At symbol
65 101 41 01000001 A &#65;   Uppercase A
66 102 42 01000010 B &#66;   Uppercase B
67 103 43 01000011 C &#67;   Uppercase C
68 104 44 01000100 D &#68;   Uppercase D
69 105 45 01000101 E &#69;   Uppercase E
70 106 46 01000110 F &#70;   Uppercase F
71 107 47 01000111 G &#71;   Uppercase G
72 110 48 01001000 H &#72;   Uppercase H
73 111 49 01001001 I &#73;   Uppercase I
74 112 4A 01001010 J &#74;   Uppercase J
75 113 4B 01001011 K &#75;   Uppercase K
76 114 4C 01001100 L &#76;   Uppercase L
77 115 4D 01001101 M &#77;   Uppercase M
78 116 4E 01001110 N &#78;   Uppercase N
79 117 4F 01001111 O &#79;   Uppercase O
80 120 50 01010000 P &#80;   Uppercase P
81 121 51 01010001 Q &#81;   Uppercase Q
82 122 52 01010010 R &#82;   Uppercase R
83 123 53 01010011 S &#83;   Uppercase S
84 124 54 01010100 T &#84;   Uppercase T
85 125 55 01010101 U &#85;   Uppercase U
86 126 56 01010110 V &#86;   Uppercase V
87 127 57 01010111 W &#87;   Uppercase W
88 130 58 01011000 X &#88;   Uppercase X
89 131 59 01011001 Y &#89;   Uppercase Y
90 132 5A 01011010 Z &#90;   Uppercase Z
91 133 5B 01011011 [ &#91;   Opening bracket
92 134 5C 01011100 \ &#92;   Backslash
93 135 5D 01011101 ] &#93;   Closing bracket
94 136 5E 01011110 ^ &#94;   Caret - circumflex
95 137 5F 01011111 _ &#95;   Underscore
96 140 60 01100000 ` &#96;   Grave accent
97 141 61 01100001 a &#97;   Lowercase a
98 142 62 01100010 b &#98;   Lowercase b
99 143 63 01100011 c &#99;   Lowercase c
100 144 64 01100100 d &#100;   Lowercase d
101 145 65 01100101 e &#101;   Lowercase e
102 146 66 01100110 f &#102;   Lowercase f
103 147 67 01100111 g &#103;   Lowercase g
104 150 68 01101000 h &#104;   Lowercase h
105 151 69 01101001 i &#105;   Lowercase i
106 152 6A 01101010 j &#106;   Lowercase j
107 153 6B 01101011 k &#107;   Lowercase k
108 154 6C 01101100 l &#108;   Lowercase l
109 155 6D 01101101 m &#109;   Lowercase m
110 156 6E 01101110 n &#110;   Lowercase n
111 157 6F 01101111 o &#111;   Lowercase o
112 160 70 01110000 p &#112;   Lowercase p
113 161 71 01110001 q &#113;   Lowercase q
114 162 72 01110010 r &#114;   Lowercase r
115 163 73 01110011 s &#115;   Lowercase s
116 164 74 01110100 t &#116;   Lowercase t
117 165 75 01110101 u &#117;   Lowercase u
118 166 76 01110110 v &#118;   Lowercase v
119 167 77 01110111 w &#119;   Lowercase w
120 170 78 01111000 x &#120;   Lowercase x
121 171 79 01111001 y &#121;   Lowercase y
122 172 7A 01111010 z &#122;   Lowercase z
123 173 7B 01111011 { &#123;   Opening brace
124 174 7C 01111100 | &#124;   Vertical bar
125 175 7D 01111101 } &#125;   Closing brace
126 176 7E 01111110 ~ &#126;   Equivalency sign - tilde
127 177 7F 01111111   &#127;   Delete

 

 

 

 

확장 아스키코드 표 (8비트 - 라틴어에 사용)

확장된 버전은 기존 7비트와 다르게 추가된 문자들을 사용할 수 있다

라틴어 외로 아래 사이트를 방문하면

Icelandic, Latin-1, Latin-2, Nordic, Portuguese and Turkish charsets을 이용할 수 있다

 

DEC OCT HEX BIN Symbol HTML Number HTML Name Description
128 200 80 10000000 &#128; &euro; Euro sign
129 201 81 10000001        
130 202 82 10000010 &#130; &sbquo; Single low-9 quotation mark
131 203 83 10000011 ƒ &#131; &fnof; Latin small letter f with hook
132 204 84 10000100 &#132; &bdquo; Double low-9 quotation mark
133 205 85 10000101 &#133; &hellip; Horizontal ellipsis
134 206 86 10000110 &#134; &dagger; Dagger
135 207 87 10000111 &#135; &Dagger; Double dagger
136 210 88 10001000 ˆ &#136; &circ; Modifier letter circumflex accent
137 211 89 10001001 &#137; &permil; Per mille sign
138 212 8A 10001010 Š &#138; &Scaron; Latin capital letter S with caron
139 213 8B 10001011 &#139; &lsaquo; Single left-pointing angle quotation
140 214 8C 10001100 Œ &#140; &OElig; Latin capital ligature OE
141 215 8D 10001101        
142 216 8E 10001110 Ž &#142;   Latin capital letter Z with caron
143 217 8F 10001111        
144 220 90 10010000        
145 221 91 10010001 &#145; &lsquo; Left single quotation mark
146 222 92 10010010 &#146; &rsquo; Right single quotation mark
147 223 93 10010011 &#147; &ldquo; Left double quotation mark
148 224 94 10010100 &#148; &rdquo; Right double quotation mark
149 225 95 10010101 &#149; &bull; Bullet
150 226 96 10010110 &#150; &ndash; En dash
151 227 97 10010111 &#151; &mdash; Em dash
152 230 98 10011000 ˜ &#152; &tilde; Small tilde
153 231 99 10011001 &#153; &trade; Trade mark sign
154 232 9A 10011010 š &#154; &scaron; Latin small letter S with caron
155 233 9B 10011011 &#155; &rsaquo; Single right-pointing angle quotation mark
156 234 9C 10011100 œ &#156; &oelig; Latin small ligature oe
157 235 9D 10011101        
158 236 9E 10011110 ž &#158;   Latin small letter z with caron
159 237 9F 10011111 Ÿ &#159; &Yuml; Latin capital letter Y with diaeresis
160 240 A0 10100000   &#160; &nbsp; Non-breaking space
161 241 A1 10100001 ¡ &#161; &iexcl; Inverted exclamation mark
162 242 A2 10100010 ¢ &#162; &cent; Cent sign
163 243 A3 10100011 £ &#163; &pound; Pound sign
164 244 A4 10100100 ¤ &#164; &curren; Currency sign
165 245 A5 10100101 ¥ &#165; &yen; Yen sign
166 246 A6 10100110 ¦ &#166; &brvbar; Pipe, Broken vertical bar
167 247 A7 10100111 § &#167; &sect; Section sign
168 250 A8 10101000 ¨ &#168; &uml; Spacing diaeresis - umlaut
169 251 A9 10101001 © &#169; &copy; Copyright sign
170 252 AA 10101010 ª &#170; &ordf; Feminine ordinal indicator
171 253 AB 10101011 « &#171; &laquo; Left double angle quotes
172 254 AC 10101100 ¬ &#172; &not; Not sign
173 255 AD 10101101 ­ &#173; &shy; Soft hyphen
174 256 AE 10101110 ® &#174; &reg; Registered trade mark sign
175 257 AF 10101111 ¯ &#175; &macr; Spacing macron - overline
176 260 B0 10110000 ° &#176; &deg; Degree sign
177 261 B1 10110001 ± &#177; &plusmn; Plus-or-minus sign
178 262 B2 10110010 ² &#178; &sup2; Superscript two - squared
179 263 B3 10110011 ³ &#179; &sup3; Superscript three - cubed
180 264 B4 10110100 ´ &#180; &acute; Acute accent - spacing acute
181 265 B5 10110101 µ &#181; &micro; Micro sign
182 266 B6 10110110 &#182; &para; Pilcrow sign - paragraph sign
183 267 B7 10110111 · &#183; &middot; Middle dot - Georgian comma
184 270 B8 10111000 ¸ &#184; &cedil; Spacing cedilla
185 271 B9 10111001 ¹ &#185; &sup1; Superscript one
186 272 BA 10111010 º &#186; &ordm; Masculine ordinal indicator
187 273 BB 10111011 » &#187; &raquo; Right double angle quotes
188 274 BC 10111100 ¼ &#188; &frac14; Fraction one quarter
189 275 BD 10111101 ½ &#189; &frac12; Fraction one half
190 276 BE 10111110 ¾ &#190; &frac34; Fraction three quarters
191 277 BF 10111111 ¿ &#191; &iquest; Inverted question mark
192 300 C0 11000000 À &#192; &Agrave; Latin capital letter A with grave
193 301 C1 11000001 Á &#193; &Aacute; Latin capital letter A with acute
194 302 C2 11000010 Â &#194; &Acirc; Latin capital letter A with circumflex
195 303 C3 11000011 Ã &#195; &Atilde; Latin capital letter A with tilde
196 304 C4 11000100 Ä &#196; &Auml; Latin capital letter A with diaeresis
197 305 C5 11000101 Å &#197; &Aring; Latin capital letter A with ring above
198 306 C6 11000110 Æ &#198; &AElig; Latin capital letter AE
199 307 C7 11000111 Ç &#199; &Ccedil; Latin capital letter C with cedilla
200 310 C8 11001000 È &#200; &Egrave; Latin capital letter E with grave
201 311 C9 11001001 É &#201; &Eacute; Latin capital letter E with acute
202 312 CA 11001010 Ê &#202; &Ecirc; Latin capital letter E with circumflex
203 313 CB 11001011 Ë &#203; &Euml; Latin capital letter E with diaeresis
204 314 CC 11001100 Ì &#204; &Igrave; Latin capital letter I with grave
205 315 CD 11001101 Í &#205; &Iacute; Latin capital letter I with acute
206 316 CE 11001110 Î &#206; &Icirc; Latin capital letter I with circumflex
207 317 CF 11001111 Ï &#207; &Iuml; Latin capital letter I with diaeresis
208 320 D0 11010000 Ð &#208; &ETH; Latin capital letter ETH
209 321 D1 11010001 Ñ &#209; &Ntilde; Latin capital letter N with tilde
210 322 D2 11010010 Ò &#210; &Ograve; Latin capital letter O with grave
211 323 D3 11010011 Ó &#211; &Oacute; Latin capital letter O with acute
212 324 D4 11010100 Ô &#212; &Ocirc; Latin capital letter O with circumflex
213 325 D5 11010101 Õ &#213; &Otilde; Latin capital letter O with tilde
214 326 D6 11010110 Ö &#214; &Ouml; Latin capital letter O with diaeresis
215 327 D7 11010111 × &#215; &times; Multiplication sign
216 330 D8 11011000 Ø &#216; &Oslash; Latin capital letter O with slash
217 331 D9 11011001 Ù &#217; &Ugrave; Latin capital letter U with grave
218 332 DA 11011010 Ú &#218; &Uacute; Latin capital letter U with acute
219 333 DB 11011011 Û &#219; &Ucirc; Latin capital letter U with circumflex
220 334 DC 11011100 Ü &#220; &Uuml; Latin capital letter U with diaeresis
221 335 DD 11011101 Ý &#221; &Yacute; Latin capital letter Y with acute
222 336 DE 11011110 Þ &#222; &THORN; Latin capital letter THORN
223 337 DF 11011111 ß &#223; &szlig; Latin small letter sharp s - ess-zed
224 340 E0 11100000 à &#224; &agrave; Latin small letter a with grave
225 341 E1 11100001 á &#225; &aacute; Latin small letter a with acute
226 342 E2 11100010 â &#226; &acirc; Latin small letter a with circumflex
227 343 E3 11100011 ã &#227; &atilde; Latin small letter a with tilde
228 344 E4 11100100 ä &#228; &auml; Latin small letter a with diaeresis
229 345 E5 11100101 å &#229; &aring; Latin small letter a with ring above
230 346 E6 11100110 æ &#230; &aelig; Latin small letter ae
231 347 E7 11100111 ç &#231; &ccedil; Latin small letter c with cedilla
232 350 E8 11101000 è &#232; &egrave; Latin small letter e with grave
233 351 E9 11101001 é &#233; &eacute; Latin small letter e with acute
234 352 EA 11101010 ê &#234; &ecirc; Latin small letter e with circumflex
235 353 EB 11101011 ë &#235; &euml; Latin small letter e with diaeresis
236 354 EC 11101100 ì &#236; &igrave; Latin small letter i with grave
237 355 ED 11101101 í &#237; &iacute; Latin small letter i with acute
238 356 EE 11101110 î &#238; &icirc; Latin small letter i with circumflex
239 357 EF 11101111 ï &#239; &iuml; Latin small letter i with diaeresis
240 360 F0 11110000 ð &#240; &eth; Latin small letter eth
241 361 F1 11110001 ñ &#241; &ntilde; Latin small letter n with tilde
242 362 F2 11110010 ò &#242; &ograve; Latin small letter o with grave
243 363 F3 11110011 ó &#243; &oacute; Latin small letter o with acute
244 364 F4 11110100 ô &#244; &ocirc; Latin small letter o with circumflex
245 365 F5 11110101 õ &#245; &otilde; Latin small letter o with tilde
246 366 F6 11110110 ö &#246; &ouml; Latin small letter o with diaeresis
247 367 F7 11110111 ÷ &#247; &divide; Division sign
248 370 F8 11111000 ø &#248; &oslash; Latin small letter o with slash
249 371 F9 11111001 ù &#249; &ugrave; Latin small letter u with grave
250 372 FA 11111010 ú &#250; &uacute; Latin small letter u with acute
251 373 FB 11111011 û &#251; &ucirc; Latin small letter u with circumflex
252 374 FC 11111100 ü &#252; &uuml; Latin small letter u with diaeresis
253 375 FD 11111101 ý &#253; &yacute; Latin small letter y with acute
254 376 FE 11111110 þ &#254; &thorn; Latin small letter thorn
255 377 FF 11111111 ÿ &#255; &yuml; Latin small letter y with diaeresis

 

 

 

 

 

참고 : https://www.ascii-code.com/

 

ASCII Code - The extended ASCII table

The following ASCII table with hex, octal, html, binary and decimal chart conversion contains both the ASCII control characters, ASCII printable characters and the extended ASCII character set Windows-1252.

www.ascii-code.com

 

 

그 외의 나라의 확장 아스키코드 포함

https://www.ascii-codes.com/

 

Ascii table for IBM PC charset (CP437) - Ascii-Codes

Code page 437 (IBM PC) American Standard Code for Information Interchange (ASCII) is a widely used character encoding system introduced in 1963. The original character set, which is now referred as the standard character set was initially composed of 128 c

www.ascii-codes.com

 

 

 

https://ko.wikipedia.org/wiki/ASCII

 

ASCII - 위키백과, 우리 모두의 백과사전

1972 프린터 사용 설명서에 개시된 아스키 코드 차트표 미국정보교환표준부호(영어: American Standard Code for Information Interchange), 또는 줄여서 ASCII( , 아스키)는 영문 알파벳을 사용하는 대표적인 문자

ko.wikipedia.org

 

반응형
반응형

 

 

파이썬 셀레니움을 이용해 자동으로 크롬 창을 열어 특정 HTML 요소에 접근해보는 포스팅을 따라해봄

 

 

 

글의 목차

 

1. 파이썬 셀레니움을 이용하는 간단한 테스트를 위한 준비물

2. 파이썬과 셀레니움을 이용한 자동화 테스트를 진행하는 방법

  1) HTML DOM 객체 접근

  2) 윈도우와 프레임 접근

  3) 테스트하기 이상적인 시간

  4) 셀레니움과 파이썬 유닛 테스트 연동

3. 파이썬 셀레니움의 한계

  1) 정리

 

 

※ 기초 예제 1에서는 목차 1,2만 다루고 2-1부터 3-1까지는 기초 예제 2에서 다룰 예정

 

 

 

1. 파이썬 셀레니움을 이용하는 간단한 테스트를 위한 준비물

pip install selenium

cmd 창에서 위의 명령어를 입력하여 selenium을 설치해준다

 

 

+셀레니움을 사용하기 위해서는 추가적으로 드라이버 설치가 필요하다

 

아래 링크에서 본인이 사용할 블라우저의 드라이버를 선택해서 설치하자

ChromeEdgeFirefox, and Safari

 

(만약 드라이버 실행 후 아래와 같은 문구가 나온다면 다른 버전의 크롬 드라이버가 필요한 것이니 당황하지 말고

본인이 사용하는 크롬 버전을 확인 후, 그에 맞는 버전의 드라이버를 추가해서 exe 파일을 교체해주면 된다)

selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 94
Current browser version is 96.0.4664.93 with binary path C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

 

 

로컬에서 셀레니움을 테스트한다면, 위의 과정만 진행해도 괜찮다

하지만 원격에서 셀레니움을 테스트하려고 한다면, 셀레니움 서버를 추가적으로 설치해줘야 한다

셀레니움 서버는 자바로 쓰여졌으므로 JRE1.6 또는 그 이상의 버전이 서버에 설치되어있어야 한다

 

다운로드는 아래 링크를 방문 ㄱㄱ

Selenium’s download page.

 


 

 

2. 파이썬과 셀레니움을 이용한 자동화 테스트를 진행하는 방법 (1-6)

1의 단계를 마쳤으면 파이썬 셀레니움 테스트를 진행할 준비가 끝났으니 아래의 단계를 진행해보자

 

 

1. Web driver와 Key 클래스 추가

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

webdriver 클래스는 브라우저에 접근이 가능하도록 해주고

Keys 클래스는 Shift 등을 포함한 키보드 입력을 도와준다

 

 

2. 이전에 설치한 브라우저 웹 드라이버 (크롬 드라이버)의 경로 생성

driver = webdriver.Chrome('./chromedriver')

로컬 환경에서 테스트한다면, 이 명령어는 로컬에서 크롬을 실행시키는 것과 같아서

close() 메소드를 사용할때까지 닫히지않는다

 

 

3. get() 메소드를 사용하여 웹사이트를 로드

driver.get("https://www.python.org")

 

 

4. 입력한 페이지 로드가 완료됐다면 .title 속성을 사용하여 웹페이지 제목 텍스트를 출력해볼수있다

print(driver.title)

파이썬 인터프리터에서 직접 실행해보면 이렇게 출력이됨

 

셀레니움으로 브라우저 창을 띄우면 자동화된 테스트 소프트웨어에 의해 제어되고 있다는 문구도 확인이 가능하다

 

 

5. 검색창에 접근해보자

f12를 눌러 HTML 엘레먼트 리스트에서 검색어 입력을 받는 DOM을 찾아 특정 값을 입력해준다

CSS 클래스, ID, name 등의 속성을 이용하여 DOM 접근이 가능하다

 

find_element_by_name() 메소드를 이용하면 된다

search_bar = driver.find_element_by_name("q")

파이썬 인터프리터에서 직접 실행하는 경우, 위와같은 워닝창이 뜨는데

 

 

한번 더 입력했더니 그냥 수용해줘서 그냥 썼음

 

 

 

6. DOM 엘레먼트 선택을 하고 clear() 메소드를 사용하여 기존에 있던 검색 창의 값을 초기화 시켜준다

그러고 전달하고 싶은 값을 send_keys() 메소드를 사용하여 입력해준다

search_bar.clear()
search_bar.send_keys("getting started with python")

search_bar.send_keys(Keys.RETURN)
#search_bar.send_keys(Keys.ENTER) - 이 방식도 위와 동일하게 작용

Keys.RETURN을 주어 엔터 입력과 동일하게 사용

 

 

 

위의 과정을 거치는 동안 셀레니움을 통해 열었던 크롬 창의 url 이 바뀌어 있는것을 알수있다

 

print(driver.current_url)

 

print를 통해 url을 출력해보면 아래와 같이 나온다

 

'https://www.python.org/search/?q=getting+started+with+python&submit='

 

close() 메소드를 이용하여 열었던 크롬 창을 닫을수있다

driver.close()

 

 

 

위의 코드를 취합해본 코드

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome('./chromedriver')
driver.get("https://www.python.org")
print(driver.title)
search_bar = driver.find_element_by_name("q")
search_bar.clear()
search_bar.send_keys("getting started with python")
search_bar.send_keys(Keys.RETURN)
print(driver.current_url)
driver.close()

 

셀레니움을 이용한 웹 크롤링의 기본을 다뤄보았다

 

 

 

참고 : https://www.browserstack.com/guide/python-selenium-to-run-web-automation-test

 

Selenium with Python : Getting Started with Automation | BrowserStack

Learn to use Selenium Python to run web automation tests with ease. Read this step-by-step tutorial on how to run your first test using Selenium & Python.

www.browserstack.com

 

 

https://stackoverflow.com/questions/1629053/typing-the-enter-return-key-in-selenium

 

Typing the Enter/Return key in Selenium

I'm looking for a quick way to type the Enter or Return key in Selenium. Unfortunately, the form I'm trying to test (not my own code, so I can't modify) doesn't have a Submit button. When working w...

stackoverflow.com

 

반응형
반응형

 

 

하나라도 완료를 뜨게하고싶어서 시도한 입출력문제

new line(\n)과 문자열 escape(\)를 추가해주면 간단하게 해결할수있다

 

 

 

 

#include<bits/stdc++.h>
using namespace std;
int main() {	
	cout<<"\\    /\\\n )  ( ')\n(  /  )\n \\(__)|";
	return 0;
}

예제 출력을 그대로 복사 붙여넣기한 다음,

줄바꿈이 필요한 곳은 \n를 백슬래시(\)앞에는 \를 추가해주면 된다

 

 

 

#include<bits/stdc++.h>
using namespace std;
int main() {	
	cout<<"|\\_/|\n|q p|   /}\n( 0 )\"\"\"\\\n|\"^\"`    |\n||_/=\\\\__|";
	return 0;
}

 

 

 

 

이게 왜 개랑 고양이인가 싶었는데

막상 출력해보니 은근 귀여움ㅋ

 

 

 

반응형
반응형

 

 

bs4 예제를 따라해보면서 마주친 오류들 기록

 

 

 

TypeError: can only concatenate str (not "Tag") to str

 

TypeError: can only concatenate str (not "list") to str

 

TypeError: can only concatenate str (not "ResultSet") to str

 

 

사용 코드

from bs4 import BeautifulSoup

html_doc = """
<html><head><title>The Dormouse's story</title></head>

<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""

soup = BeautifulSoup(html_doc)


print("p : " + soup.p)

 

 

스택오버플로우 답변들을 참고해보니 파이썬에서 print 메서드string 타입만 +를 사용한 출력이 가능하고

그 외의 사용법은 모두 콤마를 사용하여 출력해야 오류가 없는것같다

 

그래서 위의 타입에러가 발생한 이유는 태그나 리스트, ResultSet 타입을 형변환없이

바로 출력했기 때문

 

 

따라서 위의 마지막 print 문을 다음과 같이 수정하면 오류가 발생하지 않는다

 

print("p : " + str(soup.p))

//Or

print("p : ",soup.p)

 

 

+번외

print("p : " + str(soup.p))
# p : <p class="title"><b>The Dormouse's story</b></p>

print("p : ",soup.a , "q")
# p :  <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a> q

print("p : "+str(soup.a) + "q")
# p : <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>q

print("p : ",soup.a, "q")
# p :  <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a> q

print("p : ",soup.a, " q")
# p :  <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>  q

print("p : "+str(soup.a) + " q")
# p : <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a> q

print에 띄어쓰기가 어떻게 출력되는지 궁금해서 테스트해봄

 

 

 

 

참고 : https://stackoverflow.com/questions/60491093/python-scraping-problem-typeerror-can-only-concatenate-str-not-resultset-t

 

Python scraping problem "TypeError: can only concatenate str (not "ResultSet") to str"

I am fresh noobster who tries to learn python as well as use it for webscraping. So I watched a few videos to learn the basics on youtube, followed the tutorial, however I cannot figure it out why my

stackoverflow.com

 

반응형
반응형

 

 

윈도우에 저장된 폰트 목록이 필요해서 찾아본 방법 기록

 

 

 

윈도우 10 기준, 폰트가 저장되는 폴더 위치 C:\Windows\Fonts

 

위의 폴더를 방문해보면

한글(hwp)에서 사용할수있는 폰트 목록을 확인할수있다

 

 

아래는 C#을 이용하여 윈도우에 설치된 폰트 목록을 가져오고

그걸 텍스트 파일로 출력하는 방법

 

cs

using System.Drawing.Text; //InstalledFontCollection
using System.IO; //StreamWriter
using System.Windows;


 private void getFont2_Click(object sender, RoutedEventArgs e)
 {
 	getFontList();
 }

public void getFontList()
{
	string installedFont = "";

	using (InstalledFontCollection col = new InstalledFontCollection())
	{
		foreach (System.Drawing.FontFamily fa in col.Families)
		{
			// 출력 형태 - 폰트 명 : [FontFamily: Name=HY얕은샘물M]
			//installedFont += "폰트 명 : " + fa + "\n";

			// 출력 형태 - 폰트 명 : HY얕은샘물M
			installedFont += "폰트 명 : " + fa.Name + "\n";
		}
	}

	// 폰트 목록을 저장할 폴더 위치
	string docPath = @"D:\kay\";

	// 위의 docPath에 저장될 폰트 리스트 파일 명 installedFont.txt
	using (StreamWriter outputFile = new StreamWriter(System.IO.Path.Combine(docPath, "installedFont.txt")))
	{		
		outputFile.WriteLine(installedFont);
	}
}

xaml

<StackPanel Grid.Row="4" Grid.Column="4">	
	<Button x:Name="getFont2" Click="getFont2_Click">폰트 가져오기</Button>
</StackPanel>

 

 

폰트를 가져오는 방법은 InstalledFontCollection 클래스를 사용했다

StreamWriter텍스트 파일을 저장할 때 사용

 

위의 방법이 설치된 폰트를 다 가져오는지 테스트해보려고 폰트 목록을 텍스트 파일로 저장했음

 

 

 

 

 



참고 : https://www.c-sharpcorner.com/UploadFile/iersoy/get-all-installed-fonts-in-C-Sharp/

 


https://docs.microsoft.com/ko-kr/dotnet/desktop/winforms/advanced/how-to-enumerate-installed-fonts?view=netframeworkdesktop-4.8 

 

방법: 설치된 글꼴 열거 - Windows Forms .NET Framework

방법: 설치된 글꼴 열거 이 문서의 내용 --> InstalledFontCollection클래스는 FontCollection 추상 기본 클래스에서 상속됩니다. 사용할 수는 InstalledFontCollection 컴퓨터에 설치 된 글꼴을 열거 하는 개체입니

docs.microsoft.com

 

반응형
반응형

 

 

 

파이썬 초보가 뚝딱뚝딱해보다 맞닥뜨린 오류

 

TypeError: write() argument must be str, not BeautifulSoup

문장만 읽어도 뭔가의 자료형 문제인가보다 싶어서 저 문제를 해결한 사람들의 답변을 따라해봄

 

print( str(bs4에서 가져온내용) )

 

이렇게 str으로 기존 출력 내용을 감싸서 출력을 했는데 이제는

 

'cp949' codec can't encode character '\xa0' in position 144794: illegal multibyte sequence

이런 오류로 진화했다

 

오류에 언급되어 있는것처럼,

출력 시 인코딩 문제인듯 싶어서 utf-8 인코딩 방식을 추가해준 방법을 따라해봤다

 

f = open("F:/kotraTest.txt",'wb')
f.write(soup.encode('utf-8'))
f.close()

또는

f = open("F:/kotraTest.txt",'w',encoding='utf-8')
f.write(str(soup))
f.close()

이렇게 되면 문제가 해결된다

 

 

 

이 방법들로 웹페이지 내용을 텍스트파일로 저장할 수 있었는데,

두가지 방법의 차이점이 문득 궁금해져서 각각의 방식으로 저장한 파일을 열어 라인 바이 라인으로 비교해봄

 

결과 값의 차이는 바이트 방식으로 파일을 저장한 두번째 방법이 enter가 한번씩 쳐져

좀더 간결한 텍스트 파일로 저장이 가능하다는 거였다

 

 

+추가로 파라미터로 사용한 wb에 대해 찾아봤더니

w는 read, write에서의 파일에 새로운 내용을 작성하거나 변경하는 등의 쓰기 기능을 수행할 때 사용하며

b는 이진파일인 binary file을 write 할때 지정해주어야 한다 함

 

대충 윈도우에서의 파이썬은 텍스트와 바이너리 파일을 구분 짓기위해 데이터를 읽거나 쓸 때,

자동으로 파일의 마지막 부분에 변화를 준다고 함

 

Binary files (이진 파일)이란,

사람이 읽을 수 없는 문자들로 이루어진 모든 파일들을 의미한다

 

JPEG, GIF 들과같은 이미지파일 일수도있고, MP3, PDF나 워드 파일과 같이 이진 문서 형식일 수 도있다

 

파이썬에서는 기본적으로 텍스트모드로 파일들을 오픈하며

바이너리 모드같이 특정 모드에서 파일을 사용하기 위해서는, wb와 같이 'b 문자'를 붙여 사용해야한다

 

 

 

 

결국 찾아본 내용을 합해보면 wb에서 b는 바이너리 모드에서 파일을 쓰기 모드로 사용한 것인데

나는 텍스트파일에 저장을 한것이므로 나의 방식에서는 w만으로 충분한듯

 

 

반응형

+ Recent posts