qt ini 파싱할 때 가끔씩 텍스트 첫번째 줄을 인식 못합니다.

chobozzang의 이미지

가끔씩 ini 파일의 첫번째 줄을 인식하지 못하는데요... 이게 라이브러리의 문제인지 다른 버그인지 모르겠네요.
혹시 이런 증상이 있으신 분 계신가요?

test.ini 라는 파일이 있으면
[abc]
a=1
b=2
c=3
이렇게 하면 첫번째 줄을 인식 못하고

test.ini
#한칸 뛰우고
[abc]
a=1
b=2
c=3
이렇게 하면 인식이 됩니다.

무조건 인식이 안되는 것은 아니고 어쩌다 가끔 인식이 안됩니다.

익명 사용자의 이미지

qsettings 쓰면서 그런문제 한번도 없었는데, 혹시 모르지만 인코딩 문제일 수도 있습니다.
윈도즈 메모장에서 유니코드 작성하면 앞에 태그가 붙어요 그녀석 때문에 첫번째줄이 인식안될 가능성은 있네요.

klyx의 이미지

파싱하는 코드를 보여주셔야죠. Qt에는 범용 ini 파서가 없습니다.

익명 사용자의 이미지

어쩌면 유니코드 BOM과 관련된 문제일지도 모르겠네요

chobozzang의 이미지

QSettings를 이용했습니다.

sSettingsFile = QApplication::applicationDirPath() + "/abc.ini";
QSettings settings(sSettingsFile, QSettings::IniFormat/*QSettings::NativeFormat*/);

settings.setIniCodec("UTF-8");

settings.beginGroup( tr("conf") );
const QStringList childKeys = settings.childKeys();
foreach( const QString &childKey, childKeys )
{
m_mapConfig.insert( childKey, settings.value(childKey).toString() );
}
settings.endGroup();

안에 내용을 QStringList에 집어 넣었구요. windows 메모장으로 ini파일 작성하였습니다.

klyx의 이미지

우선 QSettings는 ini파서가 아닙니다. QSettings으로 저장된 ini에 대해서만 정상 작동이 보장됩니다.
따라서 세팅을 저장하고 싶은게 아니라 다른 ini 파일을 읽고 쓰고 싶으신거라면 따로 파서를 구현하시는게 좋습니다.

chobozzang의 이미지

죄송합니다. 이해가 잘 안되서 그러는데요. QSettings으로 저장된 ini에 대해서만 정상 작동이 보장된다는 것이 어떤 의미 인가요?

klyx의 이미지

말그대로입니다.
QSettings 클래스를 통해서 생성된 INI 파일이 아니면 제대로 읽어온다는 보장이 없다는 뜻입니다.
한마디로, QSettings는 INI파서가 아닙니다.
그냥 plain text로 값을 저장하는 전용 포맷에 확장자만 ini라고 생각하시는게 좋습니다.

chobozzang의 이미지

아 틀렸네요 QStringList가 아니라 QMap에 집어넣었습니다..

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.