본문 바로가기

Programing (프로그래밍)/WPF & C# (C Sharp)

WPF & C# - ini 파일 내 방식대로 읽기 ( ini / cfg / config / txt / sector / 섹터 )

728x90
반응형


 WPF & C# - ini 파일 내 방식대로 읽기 ( ini / cfg / config / txt / sector / 섹터 )




txt_compare.zip




 @ ini 파일 읽기

인터넷 검색해보니 dll 파일 쓰라고 나와있던데, 그거 쓰고도 뭔가 찝찝한 느낌이 들어서 그냥 간단하게 만들어봤다.

어떤지는 아직 잘 모르겠다.


일단 파일 전체를 읽은 후 점점 좁혀들어가는 방식을 취했다.

( 한줄씩 읽는것도 있으나 전체 읽어들인 파일을 나중에 또 써먹을까 싶어서다. )

파일전체 읽기 > 해당 섹터 ( setor )찾기 > Key 값 찾아서 value return 하기


사용방법은 아래와 같다.

string val = iniRead(iniPath, "setor222", "Program");  // 파일주소, 섹터, 키 값



MainWindow.xaml.cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<Window x:Class="txt_compare.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:txt_compare"
        mc:Ignorable="d"
        Title="MainWindow" Height="341" Width="508">
    <Grid>
        <Button x:Name="btn_Read" Content="Read" HorizontalAlignment="Left" Height="58" Margin="10,65,0,0" VerticalAlignment="Top" Width="67" Click="btn_Read_Click"/>
        <TextBlock HorizontalAlignment="Left" Margin="10,10,0,0" TextWrapping="Wrap" Text="ini 파일 읽어 들이기" VerticalAlignment="Top" Height="50" Width="362" FontSize="24"/>
 
    </Grid>
</Window>
 
cs




MainWindow.xaml.cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
private void btn_Read_Click(object sender, RoutedEventArgs e)
{
    string iniPath = @".\aaa.ini";
    string val = iniRead(iniPath, "setor222""Program");
    MessageBox.Show(val);
}
 
// iniRead
private string iniRead(string iniPath, string sectorWord, string keyWord)
{
    string val="";   // 리턴 값
    string paragraph = ">> "// setor 구분자
 
    try
    {
        // ini 파일 읽어 들이기
        StreamReader file = new StreamReader(iniPath);
        string str = file.ReadToEnd();   // file 전체를 읽어들인다.
        file.Close();
        string[] setor = str.Split(new string[] { paragraph }, StringSplitOptions.RemoveEmptyEntries);   // setor 단위로 배열에 저장
        foreach (string setor_str in setor)
        {
            if (sectorWord == setor_str.Substring(0, sectorWord.Length))   // sectorWord 와 매칭되는 Sector check
            {
                string[] sentence = setor_str.Split('\n');   // sector을 line 별로 저장
                foreach (string sentence_str in sentence)
                {
                    if (sentence_str.IndexOf("=">= 0)   // sentence에 "=" 가 포함되는지 check
                    {
                        if (keyWord == sentence_str.Substring(0, sentence_str.IndexOf("=")).Trim())   // keyWord 값 매칭
                        {
                            val = sentence_str.Substring(sentence_str.IndexOf("="+ 1).Trim();
                            break;
                        }
                    }
                }
            }
        }
    }
    catch (Exception error)
    {
        MessageBox.Show(error.Message);
    }
    return val;
cs



 @ 리턴값을 string val=""; 이렇게 해줘야 에러가 안난다.

처음에는 string val;   // 리턴 값 이렇게 했는데... 에러난다... 왜그런지 아는 사람은 알려주쎄요... ㅠㅠ

그래서 string val="";   // 리턴 값 이렇게 바꿨더니 에러가 안난다. 뭘까?

이거 때문에 또 한참 고생했다. ㅠㅠ


* 파일과 좀 다르다. 소스에 약간의 수정된 부분이 있다.




http://insurang.tistory.com


728x90
반응형