반응형

 

 

 

파싱해온 문자열에 double형 값이 4개가 들어있는데

콤마로 이루어진 문자열에서 각각의 숫자를 꺼내보고 싶어 찾아본 방법

 

※콤마 뿐 아니라 공백, 특정 단어를 사용하여 파싱하는 방법도 함께 기록해봄

 

C# 문자열 파싱

 

과정

1. 특정 문자를 이용한 문자열 자르기

2. 배열에 잘라둔 문자열 넣기

3. 필요한 위치의 문자 형변환

 

 

 

 

아래 예시코드는 공백을 기준으로 숫자(처럼 보이지만 문자열임)를 잘라낼수있다

string textBuff = "-1.123    4.234  34.12  126.4  99      22";

double[] result = textBuff
    .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
    .Select(s => double.Parse(s))
    .ToArray();

double x = result[0];
//    ...
double k = result[5];

 

람다 함수가 낯설다면 아래의 방법을 사용하자

 

근데 람다를 이용한 방법이 메모리 효율을 엄청 늘려준다고 하니

람다를 익혀서 위의 방식을 사용하는게 훨씬 이득일듯

 

string textBuff = "-1.123    4.234  34.12  126.4  99      22";

string[] result = textBuff.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

double x = double.Parse(result[0]);
//    ...
double k = double.Parse(result[5]);

 

 

만약 파싱하려는 문자열이 콤마 , (comma) 를 기준으로 나열되어 있다면

Split 함수의 ' ' 부분을 ','로 바꾸어 사용하면 된다

 

 

나의 경우는 마진 값을 string으로 받아져서 콤마를 기준으로 Top 값을 갖고오기 위해 문자열을 잘라보았다

Marin은 left, top, right, bottom 이므로

여기서 내가 추출해야할 Top은 2번째 값이라 MarginResult[1] 값을 형변환 해주면 끝

 

//Margin = (10,50,0,100)
string MarginStr = Margin.ToString();
string[] MarginResult = MarginStr.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

 

 

문자열에서 가져온 숫자를 int형으로 바꾸어 사용하고 싶다면

//double x = double.Parse(result[0]);

int x = int.Parse(result[0]);

위의 형태로 선언하면 된다

 

 

 

 

참고 :

문자열 파싱

https://stackoverflow.com/questions/1406129/parse-multiple-doubles-from-string-in-c-sharp

 

Parse multiple doubles from string in C#

I have a string that contains a known number of double values. What's the cleanest way (via C#) to parse the string and plug the results into matching scalar variables. Basically, I want to do the

stackoverflow.com

 

들여쓰기(tab 키) 기준 파싱

https://stackoverflow.com/questions/12384905/string-split-function-in-c-sharp-tab-delimiter

 

string.Split function in c# tab delimiter

I have a function which reads a delimited file. The delimiter is passed to the function by string argument. The problem is, when I pass the "\t" delimiter, it ends up like "\\t" and therefore, Sp...

stackoverflow.com

 

 

반응형
반응형

 

 

 

빌드 환경 : Visual Studio 2019

 

(끔찍)

 

 

WPF 예제를 돌려보려던 차에 발견한 오류

 

원문은 다음과 같다

 

현재 .NET SDK에서는 .NET 6.0을(를) 대상으로 하는 것을 지원하지 않습니다. .NET 5.0 이하를 대상으로 하거나 .NET 6.0을(를) 지원하는 .NET SDK 버전을 사용하세요.

 

이 문구를 조금 잘라서 구글링을 해보면

바로 마이크로소프트에서 해결하는 법을 안내해준다

 

MS에서 맞닥뜨린 문구의 기본형은 다음과 같다

NETSDK1045: 현재 .NET SDK는 대상으로 ‘최신 버전’을 지원하지 않습니다. ‘이전 버전’ 이하를 대상으로 하거나 ‘최신 버전’을 지원하는 .NET SDK 버전을 사용합니다.

 

= .net 버전차이로 인한 오류일 확률이 높다

 


이러한 문제를 해결하기 위해 찾아보아야 할 것

 

1. .net SDK 버전

- 프로젝트 파일(.csproj, .vbproj 또는 .fsproj)을 열고 대상 프레임워크를 확인

 

2. 미리보기가 사용되지 않음

- 도구 > 옵션 > 환경 > 미리보기 기능으로 이동 후 .NET Core SDK 미리보기 사용이 선택되어 있는지 확인

 

3. Visual Studio 버전

- .NET Core 3.0 이상은 Visual Studio 2019 버전이 필요하며

프로젝트 빌드를 위해서는 2019의 16.3 이상 버전이 필요하다

 

4. PATH 환경변수

 

5. MSBuildSDKPath 환경변수

 

6. global.json 파일

- 프로젝트 루트 폴더에 있는 global.json 파일에 지정된 SDK 버전이 있는지 확인 후,

필요한 .NET Core 버전을 설치한다

 

7. Directory.build.props 파일


 

 

 

나의 경우는 웬만하면 1번/6번 또는 3번에서 해결이 되긴 함

 

그렇기도하고 오류자체도 .net 버전에 관련된 것이어서 1번부터 시행해봄

 

 

.net SDK 버전 확인하기

 

프로젝트의 타겟 프레임워크 확인 시

<TargetFramework>netcoreapp3.0</TargetFramework>

위와 비슷한 형태로 찾을수있다

 

 

1번박스의 2번 박스를 우클릭하여 속성을 누른다

 

?

있어야할곳이 비어있다

 

 

그래서 6번의 global.json을 찾아봄

global.json은 WPF-Samples-main 폴더 아래에 바로 있다

 

 

{
  "sdk": {
    "version": "6.0.100-rc.1.21368.3",
    "rollForward": "latestFeature"
  },
  "altsdk": {
    "netcoreapp3.1": "3.1.300",
    "net6.0-windows": "6.0.100-rc.1.21368.3"
  }
}

 

파일을 열어보면 sdk 버전이 6.0 이상인것을 확인할수있다

= 즉 이 WPF sample 솔루션을 돌려보려면 .net 6.0 이상이 설치되어 있어야한다는것

 

 

 

 

 

[C#] .net sdk 설치 유무 및 버전 확인 하는법

기존 예제들을 빌드해볼때마다 가끔 만나는 오류 NETSDK1045: 현재 .NET SDK는 대상으로 ‘최신 버전’을 지원하지 않습니다. ‘이전 버전’ 이하를 대상으로 하거나 ‘최신 버전’을 지원하는 .NET SD

studyingpingu.tistory.com

 

닷넷 설치 유무나 런타임 버전확인은 위 포스팅 참고하거나

dotnet --list-sdks

위의 명령어를 CMD창에 입력해보면 되겠다

 

 

 

그렇게 찾아봤더니 내 PC에 6.0이 설치가 안되어있어 오류가 발생한것같았다

 

그래서 설치해본 .net 6.0

 

 

.net 버전들은 아래의 주소에서 내려받기가 가능하다

 

 

.NET Downloads (Linux, macOS, and Windows)

Official .NET downloads for Linux, macOS, and Windows. .NET is a free, cross-platform, open-source developer platform for building many different types of applications.

dotnet.microsoft.com

 

 

 

 

 

 

 

다운로드가 끝나고 난 뒤 프로젝트를 오픈하고 빌드해보면 굉장히 잘 돌아가는것을 알수있다

 

 

 

 

 

참고 :

 

 

https://docs.microsoft.com/ko-kr/dotnet/core/tools/sdk-errors/netsdk1045

 

NETSDK1045: 현재 .NET SDK는 대상으로 ‘최신 버전’을 지원하지 않습니다. - .NET CLI

빌드 도구가 요청된 .NET SDK 버전을 찾을 수 없을 때 발생하는 .NET SDK 오류 NETSDK1045에 관해 알아봅니다.

docs.microsoft.com

 

반응형
반응형

 

기존 예제들을 빌드해볼때마다 가끔 만나는 오류

 

NETSDK1045: 현재 .NET SDK는 대상으로 ‘최신 버전’을 지원하지 않습니다. ‘이전 버전’ 이하를 대상으로 하거나 ‘최신 버전’을 지원하는 .NET SDK 버전을 사용합니다.

 

 

위 오류를 해결하기 위해 .net sdk 버전이나 설치 유무를 확인할 수 있는 방법을 기록해봄

 

 

 

PC에 설치된 .net 버전을 확인하는 방법은 다음과 같다

dotnet --list-sdks

위의 명령어를 cmd에 입력해보면 됨

 

 

추가로 PC에 설치된 런타임을 조회하는 방법

dotnet --list-runtimes

 

 

 

 

SDK와 닷넷 런타임 버전을 포함하여 OS, 런타임식별자(RID) 등의 환경 정보를

한번에 확인하는 방법도 있다

 

dotnet --info

 

 

반응형
반응형

내문서 폴더에 파일을 저장해야해서 찾아본 폴더 경로 가져오는법

 

보통 파일을 컴퓨터에 저장할 때, 그 경로를 자동으로 저장하는 방식을 사용할때가 있고

사용자가 매번 지정해서 저장하게 하는 방식을 사용하는데

 

자동으로 특정 폴더에 파일을 저장했어야해서 찾아본 방식

 

 

당장 필요한 경로는 내문서 폴더였는데 찾아본 사이트에 웬만큼 사용하는 시스템 폴더 경로들이 많이있어서

한꺼번에 공유해본다

 

 

내문서 경로 가져오는법 예시

 

string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
// path = 내문서

string outputFolder = path + @"\Pingu\Video";
// outputFolder = 내문서\Pingu\Video

만약 내문서 폴더안에 있는 특정 폴더를 지정해주고 싶다면

위의 outputfolder 처럼 사용해주면 된다

 

이때 특정 폴더가 존재하지않는 경우 에러가 나거나 프로그램이 종료될수있으니

미리 폴더의 유무를 확인하고 사용해야되겠다

 

 

사용법

Environment.GetFolderPath(Environment.SpecialFolder.사용하고 싶은 디렉토리 지정);

 

사용 예시

 

 

 

 

아래는 내컴퓨터, 비디오, ProgramFilesX86 등의 사용자 데스크탑 폴더 경로를 가져오는 방법

 

AdminTools 48 개별 사용자를 위한 관리 도구를 저장하는 데 사용되는 파일 시스템 디렉터리입니다. MMC(Microsoft Management Console)에서는 사용자 지정 콘솔을 이 디렉터리에 저장하며 사용자와 로밍합니다.
ApplicationData 26 현재 로밍 사용자의 애플리케이션 관련 데이터에 대한 공용 리포지토리로 사용되는 디렉터리입니다. 로밍 사용자는 네트워크에 있는 둘 이상의 컴퓨터에서 작업합니다. 로밍 사용자 프로필은 네트워크의 서버에서 유지되고 사용자가 로그온할 때 시스템으로 로드됩니다.
CDBurning 59 CD에 기록될 때까지 기다리는 파일을 위한 스테이징 영역으로 사용되는 파일 시스템 디렉터리입니다.
CommonAdminTools 47 컴퓨터의 모든 사용자를 위한 관리 도구가 들어 있는 파일 시스템 디렉터리입니다.
CommonApplicationData 35 모든 사용자가 사용하는 애플리케이션 관련 데이터에 대한 공용 리포지토리로 사용되는 디렉터리입니다.
CommonDesktopDirectory 25 모든 사용자의 바탕 화면에 나타나는 파일 및 폴더가 들어 있는 파일 시스템 디렉터리입니다.
CommonDocuments 46 모든 사용자에게 공통된 문서가 들어 있는 파일 시스템 디렉터리입니다.
CommonMusic 53 모든 사용자에게 공통된 음악 파일의 리포지토리로 사용되는 파일 시스템 디렉터리입니다.
58 이 값은 이전 버전과의 호환성을 위해 Windows Vista에서 인식되지만 특수 폴더 자체는 더 이상 사용되지 않습니다.
CommonPictures 54 모든 사용자에게 공통된 이미지 파일의 리포지토리로 사용되는 파일 시스템 디렉터리입니다.
CommonProgramFiles 43 전체 애플리케이션에서 공유되는 구성 요소에 대한 디렉터리입니다.
비 x86 프로세스의 x86 공통 프로그램 파일 디렉터리를 가져오려면 ProgramFilesX86 멤버를 사용합니다.
CommonProgramFilesX86 44 Program Files 폴더입니다.
CommonPrograms 23 애플리케이션 간에 공유되는 구성 요소에 대한 폴더입니다.
CommonStartMenu 22 모든 사용자의 시작 메뉴에 나타나는 프로그램 및 폴더가 들어 있는 파일 시스템 디렉터리입니다.
CommonStartup 24 모든 사용자의 시작 폴더에 나타나는 프로그램이 들어 있는 파일 시스템 디렉터리입니다.
CommonTemplates 45 모든 사용자가 사용할 수 있는 템플릿이 들어 있는 파일 시스템 디렉터리입니다.
CommonVideos 55 모든 사용자에게 공통된 비디오 파일의 리포지토리로 사용되는 파일 시스템 디렉터리입니다.
Cookies 33 인터넷 쿠키에 대한 공용 리포지토리로 사용되는 디렉터리입니다.
Desktop 0 실제 파일 시스템 위치가 아니라 논리 데스크톱입니다.
DesktopDirectory 16 데스크톱에서 실제로 파일 개체를 저장하는 데 사용되는 디렉터리입니다. 가상 폴더인 데스크톱 폴더 자체와 이 디렉터리를 혼동하지 마세요.
Favorites 6 사용자가 즐겨찾는 항목에 대한 공용 리포지토리로 사용되는 디렉터리입니다.
Fonts 20 글꼴이 들어 있는 가상 폴더입니다.
History 34 인터넷 기록 항목에 대한 공용 리포지토리로 사용되는 디렉터리입니다.
InternetCache 32 임시 인터넷 파일에 대한 공용 리포지토리로 사용되는 디렉터리입니다.
LocalApplicationData 28 현재 로밍하지 않은 사용자가 사용하는 애플리케이션 관련 데이터에 대한 공용 리포지토리로 사용되는 디렉터리입니다.
LocalizedResources 57 지역화된 리소스 데이터가 들어 있는 파일 시스템 디렉터리입니다.
MyComputer 17 내 컴퓨터 폴더입니다. Environment.GetFolderPath 메서드에 전달되면 MyComputer 열거형 멤버는 항상 빈 문자열(“”)을 생성합니다. 내 컴퓨터 폴더의 경로가 정의되지 않았기 때문입니다.
MyDocuments 5 내 문서 폴더입니다. 이 멤버는 Personal에 해당합니다.
MyMusic 13 내 음악 폴더입니다.
MyPictures 39 내 그림 폴더입니다.
MyVideos 14 사용자에 속한 동영상의 리포지토리로 사용되는 파일 시스템 디렉터리입니다.
NetworkShortcuts 19 네트워크 환경 가상 폴더에 있을 수 있는 링크 개체가 들어 있는 파일 시스템 디렉터리입니다.
Personal 5 문서에 대한 공용 리포지토리로 사용되는 디렉터리입니다. 이 멤버는 MyDocuments에 해당합니다.
PrinterShortcuts 27 프린터 가상 폴더에 있을 수 있는 링크 개체가 들어 있는 파일 시스템 디렉터리입니다.
ProgramFiles 38 프로그램 파일 디렉터리입니다.
비 x86 프로세스에서 ProgramFiles GetFolderPath(Environment+SpecialFolder) 메서드로 전달하면 비 x86 프로그램의 경로가 반환됩니다. 비 x86 프로세스에서 x86 프로그램 파일 디렉터리를 가져오려면 ProgramFilesX86 멤버를 사용합니다.
ProgramFilesX86 42 x86 Program Files 폴더입니다.
Programs 2 사용자의 프로그램 그룹이 들어 있는 디렉터리입니다.
Recent 8 사용자가 가장 최근에 사용한 문서가 들어 있는 디렉터리입니다.
Resources 56 리소스 데이터가 들어 있는 파일 시스템 디렉터리입니다.
SendTo 9 보내기 메뉴 항목이 들어 있는 디렉터리입니다.
StartMenu 11 시작 메뉴 항목이 들어 있는 디렉터리입니다.
Startup 7 사용자의 시작 프로그램 그룹에 해당하는 디렉터리입니다. 사용자가 로그온하거나 Windows를 시작할 때마다 시스템에서 이러한 프로그램이 시작됩니다.
System 37 시스템 디렉터리입니다.
SystemX86 41 Windows System 폴더입니다.
Templates 21 문서 템플릿에 대한 공용 리포지토리로 사용되는 디렉터리입니다.
UserProfile 40 사용자의 프로필 폴더입니다. 애플리케이션에서는 이 수준에 파일이나 폴더를 만들 수 없으며 ApplicationData에서 참조되는 위치 아래에 데이터를 두어야 합니다.
Windows 36 Windows 디렉터리 또는 SYSROOT입니다. %windir% 또는 %SYSTEMROOT% 환경 변수에 해당합니다.

 

 

 

 

참고 : 

https://docs.microsoft.com/ko-kr/dotnet/api/system.environment.specialfolder?view=net-5.0#System_Environment_SpecialFolder_Personal 

 

Environment.SpecialFolder 열거형 (System)

시스템 특수 폴더에 대한 디렉터리 경로를 검색하는 데 사용되는 열거 상수를 지정합니다.Specifies enumerated constants used to retrieve directory paths to system special folders.

docs.microsoft.com

 

반응형

+ Recent posts