나는 쉼표 (,)에 따라 문자열을 나눌 거대한 텍스트 파일을 읽고 배열에 문자열을 저장하려고합니다. 그렇게하는 법. badaOS에서와 같이 StringTokenizer로 작업을 수행하는 클래스가 있습니까? QFile 시도했지만 전체 파일을 읽을 수 없습니다.Qt에서 텍스트 파일 읽기
답변
파일 스트림을 사용할 수 있습니다.
QFile file = new QFile(hugeFile);
file.open(QIODevice.OpenModeFlag.ReadOnly);
QDataStream inputStream = new QDataStream(file);
QStringList array;
QString temp;
while(!inputStream.atEnd()) {
inputStream >> temp;
array << temp.split(";");
}
테스트되지 않은 (의사) 코드임을 유의하십시오.
QDataStream은 텍스트 파일에서 작동하지 않습니다. –
"작동하지 않는다"는 것은 무엇을 의미합니까? 진정한 텍스트 파일을 가지고 있으며 Qt를 지원하는 OS가 있습니까? VMS는 그것들을 가지고 있지만 Qt를 지원하지는 않습니다. Unix, Linux 및 Windows에서 "텍스트"는 일반 파일의 특수 해석 일뿐입니다. – MSalters
@MSalters, QDataStream은 문자열에 대해 연산자 '를 오버로드하지 않았습니다. 대답의 코드는 컴파일되지 않습니다. –
QTextStream 당신이 당신은 항상 파일의 일부를 읽을 수 있습니다 라인
QFile file(hugeFile);
QStringList strings;
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream in(&file);
while (!in.atEnd()) {
strings += in.readLine().split(";");
}
}
좋은 해결책이지만 이전에 언급했듯이 거대한 라인이 있거나 라인 분리 기호가 전혀없는 경우에는 잘 작동하지 않습니다. 나는 또한 왜 두 대답 모두 ";" 예제에서 ","을 언급했을 때. –
";"사용 구분 기호는 _de facto_입니다. – Henrikki
으로 라인을 읽을 수 :
QFile file(...);
file.read(1000); // reads no more than 1000 bytes
또는 라인으로 당신은 차를 읽을 파일 라인 :
file.readLine();
하지만 한 문자열이 두 조각으로 분할 된 경우를 처리해야합니다.
정말 큰 파일이라면 file.read (an_appropriate_number)로 읽을 수 있고 file.atEnd()는 false입니다.
청크 (file.read() 포함)를 읽고 임시 문자열 버퍼에 추가하고 ','(예 : QString의 contains() 메소드 사용)을 검색하십시오. ','가 포함 된 경우 QString의 split() 메서드로 분할합니다. 첫 번째 X 부분 (읽은 1000 자에 1 개 이상의 토큰이 포함될 수 있음)에 발견 된 토큰이 포함되며 마지막 토큰은 아직 완전한 토큰이 아닙니다. 따라서 임시 문자열을 분할의 마지막 부분으로 전환하고 다른 청크를 읽습니다 (file.atEnd()를 누를 때까지) 임시 문자열 버퍼에 추가하십시오. 토큰이 거대하지 않은 한 효율적으로 작동합니다. 그리고 마지막으로 버퍼링 된 텍스트를 처리 한 후에 file.atEnd()를 처리하는 것을 잊지 마십시오.
또는 문자를 기준으로 파일을 읽고 ','를 수동으로 확인할 수 있지만 항상 그렇습니다 1 문자 이상을 읽는 것이 더 좋습니다 (더 많이 읽는다면 더 효율적입니다).
쉼표 뒤에 공백을 캡처하지 않습니다. 만족스럽지 않으면 정규식을 최적화하십시오. 또한 상단의 포함 금액을 줄일 수도 있습니다. 나는 철저히 조사 중이었습니다. 5.6
#include <QCoreApplication>
#include <QFile>
#include <QIODevice>
#include <QRegularExpression>
#include <QRegularExpressionMatch>
#include <QRegularExpressionMatchIterator>
#include <QString>
#include <QStringList>
#include <QTextStream>
int main(int argc, char * argv[])
{
QCoreApplication app(argc, argv);
QFile file("C:\\PathToFile\\bigFile.fileExt");
QStringList lines;
QStringList matches;
QString match;
file.open(QIODevice::ReadOnly | QIODevice::Text);
while(!file.atEnd())
{
lines << file.readLine();
}
file.close();
QRegularExpression regex("(^|\\s|,)\\K\\w.*?(?=(,|$))");
QRegularExpressionMatchIterator it;
foreach (QString element, lines)
{
it = regex.globalMatch(element);
while(it.hasNext())
{
QRegularExpressionMatch qre_match = it.next();
match = qre_match.captured(0);
matches << match;
}
}
return 0;
}
- 1. Qt에서 줄 단위로 텍스트 파일 읽기
- 2. 텍스트 파일 읽기
- 3. D의 텍스트 파일 읽기
- 4. 간단한 텍스트 파일 읽기
- 5. LINQ로 텍스트 파일 읽기
- 6. 텍스트 파일 읽기
- 7. 배열로 텍스트 파일 읽기
- 8. Safearray로 텍스트 파일 읽기
- 9. 자바에서 텍스트 파일 읽기
- 10. 텍스트 파일 읽기
- 11. QStringList에 텍스트 파일 읽기
- 12. C에서 배열로 텍스트 파일 읽기
- 13. Xcode : URL에서 텍스트 파일 읽기
- 14. 안드로이드 서버에서 텍스트 파일 읽기
- 15. Qt에서 UTF-8 파일 만들기
- 16. QT에서 많은 파일 다운로드
- 17. Qt에서 새 파일 만들기/쓰기
- 18. Qt에서 텍스트 스트림 유형 변경
- 19. 리눅스에서 DOS/Windows 텍스트 파일 읽기
- 20. 자바 스크립트에서 텍스트 파일 읽기 및 표시
- 21. CR 종료 키워드 텍스트 파일 읽기
- 22. php 큰 텍스트 파일 로그 읽기
- 23. C++ int 및 문자열로 텍스트 파일 읽기
- 24. 안드로이드/자바 텍스트 파일 읽기 문제
- 25. 파이썬 읽기 utf8 텍스트 파일 문제
- 26. 텍스트 파일 읽기 및 특정 열 추출
- 27. 특정 줄에서 텍스트 파일 읽기 시작
- 28. 파이썬으로 읽기 전용 텍스트 파일 만들기
- 29. .NET 프로젝트 내에서 텍스트 파일 읽기
- 30. MySQL에서 직렬 텍스트 파일 읽기 성능에 가깝습니다.
당신이 사용을 고려 했나 내가 1600 선 파일이 테스트하고 Qt를 잘 그것을 처리 할 듯 [표준 : : ifstream (http://www.cplusplus.com/reference/iostream/ ifstream /)? – Oswald
한 번에 전체 파일을 읽지 마십시오. 줄 단위로 내용을 읽으십시오. –
이 거대한 파일에 긴 줄이 있습니까? 그렇지 않다면 QTextStream :: readLine()과 QString :: split()이 도움이 될 것입니다. –