qt ini 파싱할 때 가끔씩 텍스트 첫번째 줄을 인식 못합니다.
글쓴이: chobozzang / 작성시간: 목, 2013/08/08 - 1:30오후
가끔씩 ini 파일의 첫번째 줄을 인식하지 못하는데요... 이게 라이브러리의 문제인지 다른 버그인지 모르겠네요.
혹시 이런 증상이 있으신 분 계신가요?
test.ini 라는 파일이 있으면
[abc]
a=1
b=2
c=3
이렇게 하면 첫번째 줄을 인식 못하고
test.ini
#한칸 뛰우고
[abc]
a=1
b=2
c=3
이렇게 하면 인식이 됩니다.
무조건 인식이 안되는 것은 아니고 어쩌다 가끔 인식이 안됩니다.
Forums:
qsettings 쓰면서 그런문제 한번도 없었는데,
qsettings 쓰면서 그런문제 한번도 없었는데, 혹시 모르지만 인코딩 문제일 수도 있습니다.
윈도즈 메모장에서 유니코드 작성하면 앞에 태그가 붙어요 그녀석 때문에 첫번째줄이 인식안될 가능성은 있네요.
파싱하는 코드를 보여주셔야죠. Qt에는 범용 ini
파싱하는 코드를 보여주셔야죠. Qt에는 범용 ini 파서가 없습니다.
어쩌면 유니코드 BOM과 관련된 문제일지도 모르겠네요
어쩌면 유니코드 BOM과 관련된 문제일지도 모르겠네요
ㅇ
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파일 작성하였습니다.
우선 QSettings는 ini파서가 아닙니다.
우선 QSettings는 ini파서가 아닙니다. QSettings으로 저장된 ini에 대해서만 정상 작동이 보장됩니다.
따라서 세팅을 저장하고 싶은게 아니라 다른 ini 파일을 읽고 쓰고 싶으신거라면 따로 파서를 구현하시는게 좋습니다.
a
죄송합니다. 이해가 잘 안되서 그러는데요. QSettings으로 저장된 ini에 대해서만 정상 작동이 보장된다는 것이 어떤 의미 인가요?
말그대로입니다.QSettings 클래스를 통해서
말그대로입니다.
QSettings 클래스를 통해서 생성된 INI 파일이 아니면 제대로 읽어온다는 보장이 없다는 뜻입니다.
한마디로, QSettings는 INI파서가 아닙니다.
그냥 plain text로 값을 저장하는 전용 포맷에 확장자만 ini라고 생각하시는게 좋습니다.
ㅃ
아 틀렸네요 QStringList가 아니라 QMap에 집어넣었습니다..
댓글 달기