Archiv pro štítek: načtení souboru

Qt – čtení ze souboru

V jednom z dalších tutoriálů týkajících se zaměříme na získání dat uložených ve formě textu a následné zobrazení v okně. Nejprve uživatele vyzveme k výběru požadovaného souboru, díky čemuž získáme potřebou cestu. Následně informace lehce poupravíme a výsledek budeme prezentovat s pomocí prvku textEdit.

Qt - načtený soubor

Zpracování údajů po řádcích

Záměrně jsem se rozhodl nenačíst celý soubor najednou, ale postupovat po částech. Získáme tak jednotlivé řádky, se kterými můžeme dále pohodlně pracovat. Pakliže by například soubor obsahoval čísla, musíme vždy každý údaj nejprve převést, aby jej šlo uchovat v proměnné typu int či double. V našem případě však vyzkoušíme něco jiného. Jednotlivé záznamy obalíme tagem H3 a výsledek textEdit dostane v HTML formě. Zcela jednoduše lze proto s textem provádět mnoho činností – změnu barvy, transformaci v tučný záznam a podobné úpravy.

#include „mainwindow.h“
#include „ui_mainwindow.h“

#include
#include
#include
#include

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

setCentralWidget(ui->textEdit);

setWindowTitle(„Načtení souboru“);

connect(ui->action_Nacist_soubor,SIGNAL(triggered()),this,SLOT(nacti_soubor()));
connect(ui->action_Konec,SIGNAL(triggered()),this,SLOT(close()));
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::nacti_soubor()
{
QString cesta = QFileDialog::getOpenFileName(this,“Zvolte soubor“,“/home“,“Textový soubor (*.txt);;Všechny soubory(*.*)“);

if(cesta.isNull())
{
QMessageBox::warning(this,“Varování“,“Nebyl vybrán žádný soubor k načtení“);
}
else
{
QFile soubor(cesta);
soubor.open(QIODevice::ReadOnly | QIODevice::Text);

QTextStream stream(&soubor);
stream.setCodec(„utf-8″);
QString radek,vysledek;

while(!stream.atEnd())
{
radek = soubor.readLine();
//V proměné radek máme načtená řádek ze souboru a můžeme s ním provádět další operace
vysledek += „

„+radek+“

\n“;

}
ui->textEdit->insertHtml(vysledek);
}
}

Rád bych upozornil na fakt, že okno sloužící k výběru souboru můžeme vyšperkovat k představám programátora. Dozajista využijete specifikování typů povolených koncovek. Činí se tak v jednom z parametrů a to díky stringovému řetězci. Jednotlivé akceptovatelné varianty odděluje dvojice středníků. Dále určujeme i výchozí složku. Protože požívám Linux, vidíte ve zdrojovém kódu /home. Lidé preferující operační systém Windows mohou směle uvést např. C:\data.

Pozor na jednu skutečnost. Uživatel má možnost dialog zjišťující cestu kdykoliv ukončit a my poté pochopitelně nemůžeme žádný soubor načíst. Ošetření vyřeší jednoduchá podmínka testující, zda proměnná cesta obsahuje daný řetězec. Pakliže ano, vše je v pořádku a můžeme programu dovolit vykonat činnost, ke které ho vytváříme. V opačném případě raději vypíšeme hlášku a uživateli pochopitelně umožníme se o zvolení cesty pokusit kdykoliv později.

Povšimněte si, že po otevření samotného souboru využijeme knihovnu QTextStream, které předáme parametr typu QFile. Jakmile tak provedeme, můžeme s daty velmi pohodlně zacházet. Začnou-li vás trápit problémy s diakritikou, zkontrolujte, zda máte správně nastaveno kódování.

Díky cyklu s podmínkou na začátku zajistíme obdržení samotných řádků. Ty poté ukládáme do koncové proměnné výsledek. Ještě než se tak stane, však přidáme slíbený párový tag H3. Ten navíc obohacuje vlastnost style udávající barvu písma. Metoda insertHtml pak již na závěr celé dílo sama dokoná.