c# 파일스트림 읽는것에 관해서 질문있습니다.

fkqpfwl121의 이미지

현재 파일스트림의 쓰기는 가능한데 파일스트림의 읽기가 문제입니다.

파일에다 썻던 textbox1의 내용을 이번에는 버튼을 하나 눌렀을때

입력했던 textbox1의 내용과 파일에 있는 내용을 비교해서 있다면 그 출력값을

다음폼으로 넘기려고 하는데 어떻게 구성을 해야할지 잘 모르겠습니다.

결론적으로는..

파일 읽기 시에 같은 화면의 입력한 textbox1의 값과, 파일스트림에 textbox1의 값이 있는지 없는지를 출력하는 코드를 하고싶습니다.

if (!File.Exists("abc.txt"))
{
using (StreamReader prime = new StreamReader("abc.txt"))
{
while(prime.Peek() >= 0)
{
if ( textbox1.text == ?????????? ) // 어떻게 비교를 해줘야 할지 잘 모르겠습니다.
{
Console.WriteLine(prime.ReadLine());
}
}
prime.Close();
}
}

shint의 이미지

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

fkqpfwl121의 이미지

그런데 이렇게 비교를해도 abc.txt에 저장한 내용을

읽으려고 할때 readline이 한문장씩을 읽는것 같아서 뜨질 않는건지 잘 모르겠습니다.

예를들어 금강산이라고 저장을 했는데 한 라인을 다 읽어버리니까 값이 있어도 값이 존재한다는 messagebox가 뜨질 않는건지 아니면 다르게 코드를

써야하는건지 감이 오질 않네요. 으아 ㅠㅠ

파일 전체를 읽어들이고 거기서 제가 입력한 textbox1.text의 값이 있다면 값이 존재한다는 messagebox를 띄우게 하고싶고 그런 의도로

소스를 좀 수정해봤는데 어디가 잘못되었는지 잘 모르겠어요...

readline에 문제가 있는건지 ..(한숨)

using (StreamReader prime = new StreamReader("abc.txt"))
{
while (prime.ReadLine() != null)
{
string currentline = prime.ReadLine();

if (textbox1.Text.Equals(currentline.ToString()))
{
MessageBox.Show("값이 존재합니다!");
}

}

}

shint의 이미지

- currentline.ToString() 을 출력해보세요.

- 출력한 내용에 \n 줄바꿈 문자가 포함되었는지 확인 합니다.

- 그리고. 위에 주소에보면. split("") 함수를 사용해서 문자열을 분리하는 내용이 있습니다.

- 구분자를 넣고. 문자열을 분리했다면. 문자열이 같은지 비교합니다.

데브피아에 C# 마을이 있으니 참고해보세요.
http://www.devpia.com/CSharp.MAEUL

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

fkqpfwl121의 이미지

제가 아직 초보자의 눈이라 shint님 정도의 시야를 갖지 못해서 글을 써주셨는데도 이해를 못하는 부분이 있어서 다시 댓글을 달았습니다..

using (StreamReader prime = new StreamReader("abc.txt"))
{
string currentline = null;

while ((currentline = prime.ReadLine())!= null)
{
if(txtIdentity.Text.Equals(currentline))
{
MessageBox.Show("값이 존재합니다");
}

/*
if (txtIdentity.Text.Equals(currentline.ToString()))
{
MessageBox.Show("값이 존재합니다!");
}
*/
}

현재 이렇게 구성이 되어있고

txtidentity는 텍스트박스 입니다.

그리고 abc.txt 에는 메모들의 기록들이 이렇게 기록되어 있습니다.

이름 : 김종철
아이디 : abc12345
비밀번호 : 123
전화번호 : 123
--------------구분자 표시---------------
이름 : 김성광
아이디 : abcmart
비밀번호 : 123
전화번호 : 123

abcmart가 있는지 로그인 버튼을 눌렀을때 돌아가는 것이 바로 위에 올려진 소스인데

abcmart가 txtidentity.text에 들어가고 prime이 abc.txt에 있는 전문을 한줄한줄 살펴서 있으면 messagebox.show()를 띄우는건데

지금 이렇게 txt형식으로 해놓으면 한줄 한줄 자체가 이름 : 김종철 이런식으로 저장을 해버리니까 문제가 생기는건가요?

아니면 이럴떄는 txtidentity.Text.indexof(s)의 형태로 풀어나가야 하나요?

shint의 이미지

C# 네이버 책
http://book.naver.com/search/search.nhn?sm=sta_hty.book&sug=&where=nexearch&query=C%23

구글 번역
https://translate.google.co.kr/

StreamReader 클래스
https://msdn.microsoft.com/ko-kr/library/system.io.streamreader(v=vs.110).aspx#

MSDN
StreamReader.ReadLine 메서드 ()
https://msdn.microsoft.com/ko-kr/library/system.io.streamreader.readline(v=vs.110).aspx#
Reads a line of characters from the current stream and returns the data as a string.
현재 스트림에서 한 줄의 문자를 읽어 들여 데이터를 문자열로 반환합니다.

public override string ReadLine()

반환 값
Type: System.String
The next line from the input stream, or null if the end of the input stream is reached.
입력 스트림에서 다음 행 또는 널 입력 스트림의 끝에 도달하는 경우.

변수 이름이 중복 되었지만. 참고용입니다.

//파일 읽기
StreamReader file_read = new StreamReader("abc.txt"))
 
//읽어진 한줄에 데이터
string currentline = file_read.ReadLine();
 
// : 구분자로 문자열을 분리
string[] values = currentline.Split(" : ");
textbox1.Text = value[0];  //이름   
textbox2.Text = value[1];  //김종철
 
 
//읽어진 한줄에 데이터
string currentline = file_read.ReadLine();
 
// : 구분자로 문자열을 분리
string[] values = currentline.Split(" : ");
textbox1.Text = value[0];  //아이디  
textbox2.Text = value[1];  //abc12345
 
 
//읽어진 한줄에 데이터
string currentline = file_read.ReadLine();
 
// : 구분자로 문자열을 분리
string[] values = currentline.Split(" : ");
textbox1.Text = value[0];  //비밀번호
textbox2.Text = value[1];  //123      
 
 
//읽어진 한줄에 데이터
string currentline = file_read.ReadLine();
 
// : 구분자로 문자열을 분리
string[] values = currentline.Split(" : ");
textbox1.Text = value[0];  //전화번호
textbox2.Text = value[1];  //123

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

alswlek의 이미지

좋은정보 감사합니다

fkqpfwl121의 이미지

끙... spilt로 이리저리 연구하고있는데 정말 ..ㅇ잘 안되서 도움을 구하고자 글을 다시 올려보았습니다. (죄송죄송..)

그냥 읽기 편하게 readline으로 한줄한줄 해보았지만, 그래도 그건 개인정보를 저장하기에 조금 구분하기 힘든점이 있어서, spilt로 쓰신 글을 참고해 보았지

만 초보자인 아직 제 입장에서 단박에 지식을 깨우치기는 힘드네요 ㅠㅠ..

현재 텍스트에는 보시는 사진과 같이 저장이 되어 있습니다.

그리고 처음에 파일을 쓸때 파일이 없다면 파일에 쓰기가 지정된것이 없으니 "데이터베이스에 저장된 정보가 아니다" 라고 출력을 하고 메세지박스를 띄워줍니다.

그리고 만약에 파일이 있다면, 사진처럼 개인정보가 ---- (절취선) 전까지 4줄이 쓰였다는 것인데..

여기서 textbox의 txtIdentity.text의 내용이 사진의 2번째인 id를 의미하는것이고,

써주신 글처럼 while문을 통해서 abc.text의 spilt(:)로 양쪽으로 나뉘면서 아이디가 일치한다면 값이 존재한다는 메세지를 띄우고 싶은게

현재 지금 제 생각입니다.

StreamReader file_read = new StreamReader("abc.txt");
string currentline = file_read.ReadLine();
string[] values = currentline.Split(" : ");

써주신 3줄의 소스에서 처음과 2번째 줄의 의도는 파악했으나 3번째 줄은 " : " 양쪽으로 나뉘어있는 문자열 2개를 따로따로 values[0] , values[1]에 저장

한다는 사실을 캐치했으나, 사진에서와 같이 알수없는 에러가 뜹니다..

string[] values를 char로 바꾸어보았으나 잘 되질않네요 ..

흐아......... 정말 초보자인 입장에서 코딩을 하면서 느끼는거지만 프로그래머들 새삼 대단하시다는 생각이 드네요 .. '- ' ..

댓글 첨부 파일: 
첨부파일 크기
Image icon a.png146.02 KB
Image icon a.png157.61 KB
shint의 이미지

C# Split()은 이렇게 사용하라고 합니다.
http://blog.naver.com/snaphacker?Redirect=Log&logNo=50134961080

string[] szGetString = m_szStrData .Split(new char[]{' ', ':'});

정확한 내용은 C# 책을 참고해보시기 바랍니다.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

fkqpfwl121의 이미지

좋은정보 감사합니다

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.