void Dialog2() { // Testkonto Commerzbank - Einzel�berweisung cout << "\nTestkonto Commerzbank : Einzel�berweisung"; cout << "\nsenden :"; FLUSH; Senden((PSZ)SENDEUEBERW); // BTX-Talk ofstream datei(DATEINAME); if (datei) { // Formular-Seite Erfassung Einzel-�berweisung // BLZ ist vorgegeben // Institut wird automatisch eingef�gt Senden((PSZ)"123456#^Otto Schubert#^100#^25^"); Senden((PSZ)"Rnr.: 123/95#^vom : 12.01.95#^#^"); // Anzeige zur Pr�fung Senden((PSZ)"#^"); // Best�tigung mit TAN und PIN Senden((PSZ)"123456^98765^#^"); cout << "\nSeiteninhalt einlesen\n"; FLUSH; Meldung(DxjReadText(0, 0, 39, 23, (PSZ)seite, sizeof(seite))); datei << seite << LF; // 9 senden Ende # weitere �berweisungen Senden((PSZ)"9^*9#"); datei.flush(); datei.close(); } }
//Zustandsvektor in Datei schreiben void SchreibeZustand(Eigen::VectorXcd xi, std::string name) { int n_max = xi.size(); std::ofstream datei(name + ".dat"); for (int i = 0; i < n_max; i++) { datei << (i - floor(n_max/2)) << " " << abs(xi(i))*abs(xi(i)) << std::endl; } datei.close(); }
//Plottet die gegebene Funktion (3D-Plot, symmetrisch in x und y) std::string plot3d(std::function<double(double,double)> function, std::string pfad, std::string name, double schritte, double start, double stop) { //***Variablen und Konstanten*** double h = (stop - start)/schritte; //Dateinamen und Titel im Plot std::string gp_skript = "skript.plt"; std::string gp_title = name; std::string name_plot = name; //***Dateistreams öffnen*** std::ofstream datei((pfad + name + ".dat").c_str()); //*.c_str() wandelt einen String in einen char-String um //***Gnuplot-Skript*** std::ofstream skript((pfad + gp_skript).c_str()); skript << "set terminal pdf" << std::endl; skript << "set output '" + pfad + name_plot + ".pdf'" << std::endl; skript << "set xrange [" << start << ":" << stop << "]" << std::endl; skript << "set yrange [" << start << ":" << stop << "]" << std::endl; //skript << "set xlabel 'Theta_0 [rad]'" << std::endl; //skript << "set ylabel 'Energie [willk. Einh.]'" << std::endl; skript << "splot '" + pfad + name_plot + ".dat' with lines" + " title '" + gp_title + "'" << std::endl; static int s = schritte; //Daten in die Gnuplot-Datenquelle einfüllen //Dateibefehle außerhalb der Schleifen //pragma liefert unsortierte Datenpunkte in der Datei //#pragma omp parallel for for (int j = 0; j < s; j++) { double y = start + j*h; for (int i = 0; i < s; i++) { double x = start + i*h; double z = function(x,y); //Daten in Datei schreiben datei << x << " " << y << " " << z << std::endl; } } //Damit Gnuplot arbeiten kann, müssen die Streams erst geschlossen werden datei.close(); skript.close(); //Aufruf von Gnuplot und Übergabe des soeben erstellten Skriptes, welches drei Plots erstellt system(("gnuplot '" + pfad + gp_skript + "'").c_str()); return pfad; }
//Daten in eine Datei schreiben void SchreibeDatenFkt(std::function<double(double)> f, double min, double max, double h, std::string name) { int nmax = ceil((max-min)/h); double x = min; std::ofstream datei(name+".dat"); for (int i = 0; i < nmax; i++) { datei << x << " " << f(x) << std::endl; x += h; } datei.close(); }
//Main-Function int main () { double xiMax = 10; double xiMin = -10; double deltaXi = 0.1; double deltaT = 0.05; double mittelWert = 0, mittelWert2 = 0; double impuls = 0, impuls2 = 0; int cn = floor(10./deltaT+0.5); int iN = 0; std::complex<double> c_i = (0,1); Eigen::MatrixXcd Sh = S_H(deltaT, &H, deltaXi, xiMax, xiMin); Eigen::VectorXcd xi = init(xiMax, xiMin, deltaXi); Eigen::VectorXcd xi_n = xi; Eigen::VectorXcd xi_temp; //Dateistreams für geforderte Ausgabe-Plots std::ofstream datei("A1d_Normierung.dat"); std::ofstream datei2("A1f.dat"); //Anwenden des Zeitentwicklungsoperators bis t=10 for (int i = 0; i < cn; i++) { xi_n = Sh*xi_n; datei << i*deltaT << " " << Norm(xi_n) << std::endl; //Animationssequenz //if (i%2 == 0) { // SchreibeZustand(xi_n, "A1d_Animation_"+convertInt(i/2)); //} //Mittelwert des Ortes und des Impulses for (int j = 0; j < xi.size(); j++) { iN = j - floor(xi.size()/2); mittelWert += iN*deltaXi*abs(xi_n(j))*abs(xi_n(j)); mittelWert2 += (iN*deltaXi)*(iN*deltaXi)*abs(xi_n(j))*abs(xi_n(j)); impuls += abs(xi_n(j)*(-c_i)*Ableitung(xi_n, j, deltaXi)); impuls2 += abs(xi_n(j)*(-1.)*Ableitung2(xi_n, j, deltaXi)); } datei2 << i*deltaT << " " << mittelWert << " " << (mittelWert2 - mittelWert*mittelWert) << " " << impuls << " " << impuls2 << std::endl; mittelWert = 0; mittelWert2 = 0; impuls = 0; impuls2 = 0; } datei.close(); datei2.close(); SchreibeZustand(xi_n, "A1d_Zustand"); return 0; }
void Hauptmenue::on_tbl_Transaktionen_activated(const QModelIndex &index) { // Test ************************************************************ int s; int row ,column; int zeilen =table->rowCount(); int spalten= table->columnCount(); int pos1,pos2,lastpos; QString line; QString eintrag[99][99]; QString verzeichnis=QCoreApplication::applicationDirPath(); verzeichnis.append("/data.txt"); QFile datei(verzeichnis); if (datei.open(QIODevice::ReadOnly | QIODevice::Text)){ QApplication::setOverrideCursor(Qt::WaitCursor); QTextStream in(&datei); while(!in.atEnd()){ line = in.readLine(); s=0; pos1=0; lastpos=0; while(pos1!=-1){ pos1=line.indexOf("\"",lastpos); lastpos=pos1+1; pos2=line.indexOf("\"",lastpos); lastpos=pos2+1; if(pos1!=-1){ eintrag[zeilen][s]=line.mid((pos1+1),(pos2-pos1-1)); s++; } } } } //datei.close(); for(row=0;row<zeilen;row++){ for(column=0;column<spalten;column++){ QTableWidgetItem *newItem = new QTableWidgetItem; newItem->setText(eintrag[row][column]); table->setItem(row, column, newItem); } } // Test ************************************************************ }
//Erstellt alle Plots (Energie, Drehmoment als Ableitung, Drehmoment klassisch), später vielleicht in eine vernünftige Klasse umschreiben, da die Funktionalität garantiert wiederverwendet wird std::string plot(std::function<double(double)> function, std::string pfad, std::string name, double schritte, double start, double stop) { //***Variablen und Konstanten*** double h = (stop - start)/schritte; double x = start; //Dateinamen und Titel im Plot std::string gp_skript = "skript.plt"; std::string gp_title = name; std::string name_plot = name; //***Dateistreams öffnen*** std::ofstream datei((pfad + name + ".dat").c_str()); //*.c_str() wandelt einen String in einen char-String um //ableitung << beschriftung << std::endl; //Titelzeile //***Gnuplot-Skript*** std::ofstream skript((pfad + gp_skript).c_str()); skript << "set terminal pdf" << std::endl; skript << "set output '" + pfad + name_plot + ".pdf'" << std::endl; skript << "set xrange [" << start << ":" << stop << "]" << std::endl; //skript << "set xlabel 'Theta_0 [rad]'" << std::endl; //skript << "set ylabel 'Energie [willk. Einh.]'" << std::endl; skript << "plot '" + pfad + name_plot + ".dat' with lines" + " title '" + gp_title + "'" << std::endl; //Daten in die Gnuplot-Datenquelle einfüllen for (int i = 0; i < schritte; i++) { double y = function(x); //Daten in Datei schreiben datei << x << " " << y << std::endl; x += h; } //Damit Gnuplot arbeiten kann, müssen die Streams erst geschlossen werden datei.close(); skript.close(); //Aufruf von Gnuplot und Übergabe des soeben erstellten Skriptes, welches drei Plots erstellt system(("gnuplot '" + pfad + gp_skript + "'").c_str()); return pfad; }
void Dialog1() { // Testkonto Commerzbank - Auszug lesen cout << "\nTestkonto Commerzbank aufrufen"; cout << "\nsenden :"; FLUSH; Senden((PSZ)SENDEAUSZUG); // BTX-Talk ofstream datei(DATEINAME); if (datei) { cout << "\nSeite einlesen\n"; FLUSH; // Seite lesen Meldung(DxjReadText(0, 0, 39, 24, (PSZ)seite, sizeof(seite))); datei << seite << LF; // Seite speichern datei.flush(); datei.close(); } }
void plotter::writedaten_() { double xwert = xmin_; double ywert; std::ofstream datei((pfad_ + name_ + ".dat").c_str()); for (int i = 0; i < schritte_; i++) { ywert = function_(xwert); datei << xwert << " " << ywert << std::endl; xwert += schrittweite_; } datei.close(); }
int main() { //Parameter const double r_inf = 3.57; //Obergrenze für r const double h_a = pow(10,-4); //Schrittweite im Aufgabenteil a.) const double epsilon = pow(10,-13); //Genauigkeitsziel bei der Nullstellensuche //Variablen std::vector<schranke> schranken; std::vector<double> R; //Speichert Nullstellen von g3 double delta; //Feigenbaum-Konstante schranke s; //Aufgabenteil a.) SchreibeDatenFkt(std::bind(&Gn,0,std::placeholders::_1),0,r_inf,h_a,"A2a_n0"); SchreibeDatenFkt(std::bind(&Gn,1,std::placeholders::_1),0,r_inf,h_a,"A2a_n1"); SchreibeDatenFkt(std::bind(&Gn,2,std::placeholders::_1),0,r_inf,h_a,"A2a_n2"); SchreibeDatenFkt(std::bind(&Gn,3,std::placeholders::_1),0,r_inf,h_a,"A2a_n3"); //Abgelesene Schranken für die Nullstellen s.min = 1.95; s.max = 2.1; schranken.push_back(s); s.min = 3.1; s.max = 3.3; schranken.push_back(s); s.min = 3.45; s.max = 3.55; schranken.push_back(s); s.min = 3.55; s.max = 3.7; schranken.push_back(s); //Nullstellen bestimmen und ausgeben std::ofstream datei("Nullstellen.dat"); datei << "#n R1 R2 R3" << std::endl; datei.precision(std::numeric_limits<double>::digits10); for (int n = 1; n < 4; n++) { datei << n << " "; for (int i = 0; i < (n+1); i++) { double nst = Intervallhalbierung(schranken[i], epsilon, n).min; datei << nst << " "; if (n==3) { R.push_back(nst); } } datei << std::endl; } //Schätzung für die Feigenbaum-Konstante delta = (R[2]-R[1])/(R[3]-R[2]); std::cout << "delta: " << delta << std::endl; datei << "Schätzung Feigenbaum-Konstante: " << delta << std::endl; return 0; }
void redirect (std::ostream& strm, const std::string& dateiname) { // Datei (mit dazugehörigem Puffer) zum Schreiben öffnen std::ofstream datei(dateiname.c_str()); // Ausgabepuffer des übergebenen Streams merken std::streambuf* strm_puffer = strm.rdbuf(); // Ausgaben in die Datei umlenken strm.rdbuf(datei.rdbuf()); datei << "direkt in die Datei geschriebene Zeile" << std::endl; strm << "auf den umgelenkten Stream geschriebene Zeile" << std::endl; // alten Ausgabepuffer des übergebenen Streams restaurieren strm.rdbuf(strm_puffer); } // schließt die Datei und den dazugehörigen Puffer
bool lade_datei_in_feld(char* dateiname, std::vector<int> &feld) { bool alles_ok = true; std::fstream datei(dateiname); std::string buffer = ""; std::vector<int> pruef; while (datei.good()) { getline(datei, buffer); for (unsigned int i = 0; i < buffer.size(); i++) { char zeichen = buffer[i]; int zahl = 0; if (zeichen != ' ') { if (pruefe_ob_zahl(zeichen)) { std::stringstream str; str << zeichen; str >> zahl; pruef.push_back(zahl); } else { alles_ok = false; } } } }
// ------------------------------------------------------ // wird zZ. nicht verwendet -> siehe readFileCtyWtDat() void laDiag::readlaTextFile() { int i, n, p; QString zeile, z, a, lpref; char buf[50]; int Status = QMessageBox::question(this, tr("Datei ueberschreiben?"), tr("Die Tabelle la.DXCC existiert bereits.\n" "Wollen Sie diese Tabelle ueberschreiben?\n" "Alle bisher eingetragenen Prefixe gehen hierbei verloren !"), QMessageBox::Yes,QMessageBox::No); if(Status != QMessageBox::Yes) return; // - sprintf(buf,"%s/log/qtlog_arrl_dxcc.dat",(char*)getenv("HOME")); QFile datei(buf); if(! datei.open(QFile::ReadOnly)) { QMessageBox::information( this, tr("ARRL_DXCC.dat"), tr("Datei 'qtlog_arrl_dxcc.dat' kann nicht geoeffnet werden !")); return; } dbflg = 1; QSqlQuery query; qy = "DELETE FROM tla"; // alte Tabellen löschen besser DROP ? query.exec(qy); qy = "DELETE FROM tpref"; query.exec(qy); QTextStream inStream(&datei); // neue Tabellen aufbauen QString qy; while(1) { while( !inStream.atEnd()) { zeile = inStream.readLine(0); if(zeile[0] != QChar('#')) break; } // ab hier die 1. und alle folgenden Text_zeilen bearbeiten // ------------------------------------------------------------------------- // pref: name: cont: ITUz: QQz: tz: Br: Lg: pref: WAE: WPX: Adif: Notiz: // 0: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: // ------------------------------------------------------------------------- QSqlQuery query; while( 1 ) { i = 0, n = 0, p = 0; qy = "INSERT INTO tla VALUES ("; while( n != 13) { // 0 - 13 Felder bearbeiten while(zeile[i] != QChar(':')) i++; // index i vor bis ':' z = ""; a = ""; while(i != p) a += zeile[p++]; // 1.item holen: kopiere item nach -> a z += a.simplified(); // space entfernen if ( n == 0 ) // Feld 0 ? lpref = z; // ja: pref sichern if( n == 2 ) { // Feld 2 Countinent ? a = z.toUpper(); // ja: wandle in großen Buchtaben z = a; } if(n == 6) { // check geograph.Koordin. if(z.endsWith("N") == true) { // ja: Breite NORD ? '+' a = z.left(z.length() -1); z = a; } else { // ist Breite SUED '-' a = "-"+z.left(z.length() -1); z = a; } } if( n == 7 ) { // falls Feld 7 - check geograph.Länge if(z.endsWith("E") == true) { // ja: Länge E (OST)'+' a = z.left(z.length() -1); z = a; } else { // ist Laenge WEST '-' a = "-"+z.left(z.length() -1); z = a; } } qy += "'"+z; if( n == 12 ) { // letztes Feld ? qy += "'"; // ja: break; } qy += "',"; i++; // text[i] position ':' im textfld p++; // text[p] schreibposition n++; // Feld_zähler } // 12 Spalten durchlaufen qy += ")"; // query fertig query.exec(qy); // la.prefix in db eintragen i = 0, n = 0, p = 0; zeile = inStream.readLine(0); while(1) { // alle sub_prefix_zeilen bearbeiten while(1) { // suche nach ',' ':' ';' if(zeile[i] == QChar(',')) break; else // oder if(zeile[i] == QChar(':')) break; else // oder if(zeile[i] == QChar(';')) break; i++; // nicht gefunden: index vorrücken } z = ""; while(i != p) z += zeile[p++]; // item_sub.prefix uebernehmen qy = "INSERT INTO tpref VALUES('"; qy += z.simplified(); // space entfernen qy += "','"+lpref+"')"; // + ref_landes_prefix query.exec(qy); // SUb_prefix in db eintragen if(zeile[p] == QChar(';')) // Zeilen_ENDE erreicht ? break; if(zeile[p] == QChar(':')) { // falls zeilen_umbruch gefunden zeile = inStream.readLine(0); i = 0, n = 0, p = 0; } else { i++; // sonst weitermachen p++; } } //if(++l == 400) { // TEST // qDebug() << l << "jetzt return"; // -.- // return; //} zeile = inStream.readLine(); // naechste laender_prefix_Zeile lesen if(zeile[0] == QChar('#')) break; // Datei_ENDE ? z = ""; // sonst neue Zeile } break; // ENDE } datei.close(); qy = "SELECT * FROM tla"; // neue Tabelle von db lesen und anzeigen getLaTable(qy); dbflg = 0; }
// ======================================================================================================== // cty_tw.dat // ------------------------------------------- void laDiag::readFileCtyWtDat() { int i, n, n1, n2, p, zlen; QString zeile, z, a; QString Country, pCQz, pITUz, eCQz, eITUz, Cont, Br, Lg, TimeOfset, Pref, Dxcc, subPref, sPref; QString subCountry, info; char buf[50]; int Status = QMessageBox::question(this, tr("Datei ueberschreiben?"), tr("Die Tabelle cty_tw.dat existiert bereits.\n" "Wollen Sie diese Tabelle ueberschreiben?\n" "Alle bisher eingetragenen Prefixe gehen hierbei verloren !"), QMessageBox::Yes,QMessageBox::No); if(Status != QMessageBox::Yes) return; sprintf(buf,"%s/log/iniFiles/cty_wt.dat",(char*)getenv("HOME")); QFile datei(buf); if(! datei.open(QFile::ReadOnly)) { QMessageBox::information( this, tr("cty.dat"), tr("Datei 'cty_wt.dat' kann nicht geoeffnet werden !")); return; } n1 = 0; n2 = 0; QSqlQuery query; qy = "DELETE FROM tla"; // alte Tabellen löschen - besser DROP ? query.exec(qy); qy = "DELETE FROM tpref"; query.exec(qy); QTextStream inStream(&datei); // neue Tabellen aufbauen QString qy; while(1) { // bis atEnd() while(1) { if(inStream.atEnd()) { datei.close(); // ENDE //qDebug() << "ENDE"; return; } else { zeile = inStream.readLine(0); if(zeile[0] != QChar('#')) { // List_Anfang, 4 Info_Zeilen überspringen break; } } } // -- // ab hier die 1. und alle folgenden Text_zeilen bearbeiten // --------------------------------------------------------------------------- // country: CQz: ITUz: Cont: Br: Lg: GMT: pref: | Dxcc: WAE: WPX: Adif: Notiz: // 0: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: // --------------------------------------------------------------------------- // Primary Prefix info =""; QSqlQuery query; QSqlField field("feld",QVariant::String); // arbeits_var. 'field' i = 0, n = 0, p = 0; // zeile enthält den String qy = "INSERT INTO tla VALUES ("; // Primary DXCC Prefix bilden while( n != 8) { // 0 - 7 Felder bearbeiten while(zeile[i] != QChar(':')) i++; // index i vor bis ':' z = ""; a = ""; while(i != p) a += zeile[p++]; // 1.item holen: kopiere item nach -> a z = a.simplified(); // space entfernen if ( n == 0 ) // Feld 0 ? Country = z; // ja: Country else if( n == 1 ) // Feld 1 CQzone - primary_CQz pCQz = z; // else if( n == 2 ) // Feld 2 ITUzone - primary_ITUz pITUz = z; // else if( n == 3 ) // Feld 3 Continent Cont = z; // space entfernen else if( n == 4 ) // Feld 4 - check geograph.Breite Br = z; // space entfernen else if( n == 5 ) { // falls Feld 5 - check geograph.Länge if(z.indexOf("-") != -1) { // ist '-'Zeichen vorhanden 'Ost' z.remove(QChar('-'), Qt::CaseInsensitive); Lg = z; // übernehme ohne Vorzeichen } else // nein; 'ist West' mit '-' Vorzeichen übernehmen Lg = "-"+z; // } else if( n == 6 ) { // Feld 6 TimeZone if(z.indexOf("-") != -1) { z.remove(QChar('-'), Qt::CaseInsensitive); TimeOfset = "+"+z; } else TimeOfset = "-"+z; } else if( n == 7 ) { // Feld 7 Prefix Pref = z; Dxcc = Pref; // Primary DXCC-Prefix break; } i++; // text[i] position ':' im textfld p++; // text[p] schreibposition n++; // Feld_zähler } // 0 - 7 Spalten durchlaufen if(Pref.indexOf("*") != -1) { // Primary DXCC: A * preceding this prefix indicates that the contry Pref.remove("*"); // is on the DARC WAEDC list, and counts in CQ-sponsored info = "* nur DARC WAEdc & CQWW, nicht ARRL Contest"; // but not ARRL-sponsord contests } qy = "INSERT INTO tla VALUES ('"+Pref; // Primary Prefix qy += "','"+Country; // -------------- qy += "','"+Cont; qy += "','"+pITUz; qy += "','"+pCQz; qy += "','"+TimeOfset; qy += "','"+Br; qy += "','"+Lg; qy += "','"+Dxcc; qy += "','','','','"+info+"')"; // lawd,lwpx,adif,notiz query.exec(qy); // la.prefix in db eintragen info =""; // jetzt Sub_prefixe übernehmen - die Parameter vom main_Prefix stehen in den Variablen // subPrefixe sind durch Komma getrennet. subCountry = ""; while( 1 ) { // min. einen subPrefix gibt es immer zeile = inStream.readLine(0); zeile = zeile.simplified(); if(zeile.indexOf("#") != -1) { //check #; ja - ist sub_La_name subCountry = zeile.replace(0,1,"-"); zeile = inStream.readLine(0); // nächste zeile jetzt mit subprefixes zeile = zeile.simplified(); } p = 0; zlen = zeile.count(); while( 1 ) { // while zeile.count() != 0 z = ""; // ein sPref_feld holen while(1) { if((zeile[p] == QChar(',')) | (zeile[p] == QChar(';'))) break; // p zeigt auf ',' z += zeile[p++]; } z.remove("="); eCQz = pCQz; // mit primary laden eITUz = pITUz; // falls keine abweichende CQz oder ITUz vorhanden ? if((z.indexOf("(") == -1) & (z.indexOf("[") == -1)) { qy = "INSERT INTO tpref VALUES('"; // INSERT sub.prefix qy += z.simplified(); // subPrefix qy += "','"+Pref+"')"; // Primary_landes_prefix // qDebug() << qy; query.exec(qy); } else { // ABWEICHENDE zonen sind vorhanden n1 = z.indexOf("("); // check auf CQz if(n1 != -1) { // ja; 3H0(23)[42] n2 = z.indexOf(")"); // separiere CQz, hole Prefix sPref = z.left(n1); // subPrefix eCQz = z.mid(n1+1,n2 -(n1+1)); // mit neuer CQz überschreiben n1 = z.indexOf("["); // check auf ITUz if(n1 != -1) { // ist auch vorhanden - 3H0(23)[42] n2 = z.indexOf("]"); eITUz = z.mid(n1+1,n2 -(n1+1)); // mit neuer ITUz überschreiben } } else { // keine CQz Änderung vorhanden n1 = z.indexOf("["); // check nur auf ITUz if(n1 != -1) { n2 = z.indexOf("]"); sPref = z.left(n1); eITUz = z.mid(n1+1,n2 -(n1+1)); // ITUz überschreiben } } // -- if(eCQz.count() == 1) { // prüfe zonen_str_len s = "0"+eCQz; eCQz = s; } if(eITUz.count() == 1) { s = "0"+eITUz; eITUz = s; } // - bilde subPrefix für abweichende CQ- und ITU_zonen if(Dxcc.compare("UA") == 0) { // European Russia subPref = Dxcc+"-"+eCQz; // UA-16 i = subCountry.count(); subPref += subCountry.mid(i -3,2); // UA-16KL } else if(Dxcc.compare("UA9") == 0) { // Asiatic Russia subPref = Dxcc+"-"+eCQz; // UA9-18 i = subCountry.count(); subPref += subCountry.mid(i -3,2); // UA-16TO } else if(Dxcc.compare("K") == 0) { // USA subCountry.remove("USA"); subPref = Dxcc+"-"+eCQz+subCountry.mid(2,2); // K-04W0 } else if(Dxcc.compare("VE") == 0) { // Canada subPref = Dxcc+"-"+eCQz; // VE-04 i = subCountry.count(); subPref += subCountry.mid(i -2,2); // VE-04 } else if(Dxcc.compare("VK") == 0) { // Australia subPref = Dxcc+"-"+eCQz; // VK-30 subPref += subCountry.mid(2,3); // VK-30QLD subPref = subPref.simplified(); // (für VK-29WA 2-stellig ) } else if(Dxcc.compare("LU") == 0) { // Argentinia subPref = Dxcc+"-"+eCQz+subCountry.mid(2,3); // LU-13Rio } else if(Dxcc.compare("BY") == 0) { // China subPref = Dxcc+"-"+eCQz+subCountry.mid(2,3); // BY-24Hei subPref = subPref.simplified(); // (für BY-24Ji 2-stellig ) } else if(Dxcc.compare("YB") == 0) { // Indonesia subPref = Dxcc+"-"+eCQz+subCountry.mid(2,4); // YB-28Jaka } else if(Dxcc.compare("PY") == 0) { // Brazil subPref = Dxcc+"-"+eCQz; // PY-04 i = subCountry.count(); subPref += subCountry.mid(i -3,2); // PY-04 } else { // default subPref = Dxcc+"-"+eCQz+subCountry.mid(2,3); // wie BY-24Hei subPref = subPref.simplified(); // (für BY-24Ji 2-stellig ) } // - a = Country + subCountry; // falls subPref noch nicht vorhanden INSERT qy = "SELECT ldxcc FROM tla WHERE la='"+subPref+"'"; query.exec(qy); // falls nicht vorhanden anlegen if( !query.size() ) { // Primary für subPref mit abweichenden CQz qy = "INSERT INTO tla VALUES ('"+subPref; // K-04W0 usw qy += "',"; field.setValue(a); // la_name zB United States K-04W0 qy += db.driver()->formatValue(field,false); // Name - escape_field - Dumont D'Urville Base qy += ",'"+Cont; // NA qy += "','"+eITUz; // abweichende UTIz qy += "','"+eCQz; // abweichende CQz qy += "','"+TimeOfset; // time_index qy += "','"+Br; // Br qy += "','"+Lg; // Lg qy += "','"+Pref; // K dxcc qy += "','','','','')"; // lawd,lwpx,adif,notiz query.exec(qy); } qy = "INSERT INTO tpref VALUES('"; // qy += sPref; // space entfernen ?? qy += "','"+subPref+"')"; // + ref_landes_prefix ?? query.exec(qy); // SUb_prefix in db eintragen } if((zeile[p] == QChar(';')) || (++p == zlen)) break; // Zeien_Ende erreicht } // while zeile != 0 //if(Pref.compare("CM") == 0) return; // TEST if(zeile[p] == QChar(';')) // falls subPrefixes_string_Ende break; // break für nächsten string } //--- while subPrefixes_str != ';', - nächste Zeile lesen } }
// ==================================================================================== // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // IMPORT // logFile, path_Dateiname, qsltype, rig, home_id // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void wadif::doImport(QString log,QString fpath, int qslmode, QString rig, int hId) { QString val, token, prog; QString Call, qsoDate; QString t, z; int idx, n, oid, id, sekcnt, vl, len; bool ok; char buf[255]; sekcnt = 10; // Sekundenzähler 10..59 oid = 0; QSqlQuery query; QFile datei( fpath ); if(! datei.open(QIODevice::ReadOnly)) { state = 1; return; // FEHLER } count = 0; QTextStream istream( &datei); // Header lesen ---------------------------------- while( istream.atEnd() != true ) { // HEADER '<eoh>' suchen len = 0; while(len == 0) { // leere zeilen ueberspringen t = istream.readLine(0); len = t.count(); if(len != 0) break; // zeile mit text gefunden } idx = 0; // text auswerten while(len != idx) if(t[idx++] == QChar('<')) break; // suche '<' z = ""; if(len != idx) { // '<' gefunden, text ist gueltig while(t[idx] != QChar(':') && t[idx] != QChar('>')) z += t[idx++]; if(t[idx] == QChar('>')) { // '>' gefunden, dann ist token ohne text z = z.toUpper(); // token immer groß if(z.compare("EOH") == 0) break; // header_ende ? } else { val = ""; // ':' gefunden, es gibt text idx++; if(z.compare("PROGRAMID") == 0) // wenn ProgrammID while(t[idx] != QChar('>')) val += t[idx++]; vl = val.toInt(&ok,10); idx++; val = ""; n = vl; // text:_laenge while(n-- != 0) val += t[idx++]; // text lesen prog = val; } } } // Header gelesen // ------------ jetzt DATA --------------------- Error = ""; count = 0; // Datensatz Zähler while(istream.atEnd() == FALSE) { // ADIF_text bis Datei_ende bearbeiten i = 0; while(i != qsoFields) strcpy(adh[i++].value,""); // value(datenfelder) QSO_tabelle loeschen i = 0; while(i != qslFields) strcpy(adhq[i++].value,""); // value(datenfelder) QSL_tabelle loeschen i = 0; while(i != awdFields) strcpy(adhw[i++].value,""); // value(datenfelder) AWD_tabelle loeschen z = istream.readLine(0); // daten_zeile lesen und bearbeiten. Zeile ist: stream ohne '\n' or '\l\r', // daten_token oder Zeilenanteile, daten_zeile_ende ist <eor> im stream. if(z.compare("<EOF>") == 0) break; // File_ende ? while(z.count() == 0) { // check: es koennte eine leer_zeile vor <eor> sein if(istream.atEnd() == TRUE) break; // oder eine leer_zeile mitten in der text_zeile (Ucx) z = istream.readLine(0); // suche text } if(istream.atEnd() == TRUE) break; // ok. ist File_ende len = z.count(); vl = 0; Lcn = ""; Cqz = ""; Ituz = ""; Dxcc = ""; t = ""; n = 0; idx = 0; // zeilen_index while( 1 ) { // 1. zeile aus datastream while(len != idx) { if(z[idx++] == QChar('<')) break; // gefunden } if(len == idx) { // das war eine leere_restzeile oder z = istream.readLine(0); // zeile war token oder zeilen_anteil; neue zeile (token) lesen len = z.count(); if(len == 0) // war leer_zeile z = istream.readLine(0); // n. zeile lesen len = z.count(); idx = 0; while(z[idx] != QChar('<')) idx++; // suche token_anfang idx++; } t = ""; while(z[idx] != QChar(':') && z[idx] != QChar('>')) t += z[idx++]; // ADIF_token_text if(z[idx] == QChar('>')) { // steht am Textende '>' ist token ohne Text t = t.toUpper(); // wenn ja; immer groß if((t.compare("EOR") == 0) || (t.compare("EOF") == 0)) // check auf zeilen od. Datei_ENDE break; } if(t.compare("EOF") == 0) break; // * schluss * token = t; // ADIF_token sichern t = ""; idx++; while(z[idx] != QChar('>') && z[idx] != QChar(':')) t += z[idx++]; // text_laenge holen vl = t.toInt(&ok,10); // laenge Datenstring sichern if(z[idx] == QChar(':')) { // ist Datum_type <QSL_DATE:8:d> idx++; // z.Z ':' überspringen idx++; // z.Z 'd' überspringen } idx++; // '>' überspringen t = ""; n = vl; // nutz_datenstring_laenge while(n-- != 0) t += z[idx++]; // nutz_daten lesen val = t; // token + data bearbeitem token = token.toUpper(); // ADIF_wort immer in groß_Buchstaben strcpy(buf,token.toAscii()); // ADIF_name nach ascii strcpy(buf,getdbName(buf)); // adif_name nach db_Spalten_name übersetzen // <token:n>val im *QSO_Datensatz* gefunden - jetzt namen checken, variable ist in val if(strlen(buf) != 0) { // falls db_spalten_name gefunden, value bearbeiten sonst überspringen if(strcmp(buf,"rufz") == 0) { // ist es das rufzeichen ? n = val.indexOf("/"); // check Cept_prefix im val if(n != -1) { // flush gefunden if( n <= 4 ) { // ja ist cept ( es gibt auch prefixe grösser 4 !! ) s = val.left(n); // ja: cept_pref sichern s += "/"; // flush anhängen val.remove(0,n +1); // cept_pref vom Rufzeiche entfernen setValue((char *)"cept",s); // CEPT_prefix setzen } } setValue((char *)"rufz",val); // Rufzeichen setzen ( ohne cept ) Call = val; // Rufz merken } else if(strcmp(buf,"dxcc") == 0) { // convertiere ADIF_Nr->la_pref n = val.toInt(&ok,10); // wenn dxcc numerisch if(ok == true ) // wenn Zahl, convertiere nach pref qy = "SELECT lcn,cqz,ituz,ldxcc FROM tla WHERE adif="+s.setNum(n); else qy = "SELECT lcn,cqz,ituz,ldxcc FROM tla WHERE ldxcc='"+val+"'"; query.exec(qy); if(query.size() != 0 ) { // prefix oder adif_nr gefunden query.next(); Lcn = query.value(0).toString(); // hole: cn aus Landestabelle Cqz = query.value(1).toString(); // cqz Ituz = query.value(2).toString(); // ituz Dxcc = query.value(3).toString(); // dxcc_prefix setValue(buf,Dxcc); // setze:DXCC_pref -alpha_type } else { // nicht gefunden Error += " Call "+getValue((char *)"rufz"); Error += " dxcc_prefix < "+val; Error += " > nicht gefunden\n"; // tr() ??? state = 1; // es ist ein Fehler aufgetreten } } else if(strcmp(buf,"band") == 0) { // check Band val = val.toUpper(); val = getSysBand(val); // übersetze Band_variable setValue(buf,val); // setze band } else if(strcmp(buf,"day") == 0) { // check Qso_Tag setValue(buf,val); // Tag setzen qsoDate = val; // Datun merken } else if(strcmp(buf,"btime") == 0) { // check Qso_Start_zeit if(vl != 6) { // falls Zeit 6.stellig sekcnt++; // Sekunden +1 if(sekcnt == 60) // sek. min 10 <-> 60 max sekcnt = 10; val.append(s.setNum(sekcnt)); // Zeit auf 8.stellig erweitern } setValue(buf,val); // setze Zeit } else if(strcmp(buf,"etime") == 0) { // Qso_Ende_zeit if(vl != 6) { sekcnt++; // Sekunden +1 if(sekcnt == 60) sekcnt = 10; val.append(s.setNum(sekcnt)); // Zeit 8.stellig } setValue(buf,val); // setze Zeit } else if(strcmp(buf,"qslr") == 0) { // ---------// QSL_r - Büro -------------------- if(val.compare("N") == 0) val = "R"; else { if(val.compare("Y") == 0) // QSL eralten ? addQslFlag((char *)"qslRvia","B"); // QSLr_via 'B' } setValue(buf,val); // R, Y, I } else if(strcmp(buf,"qsls") == 0) { // qsl_s if( !qslmode ) // qslMode = 0 ( daten aus contest ) val = ""; else { // qslMode = 1 ( daten aus anderem LOG ) - wie Import if(val.compare("N") == 0) { val = "R"; setValue((char *)"prflg","B"); // QSL_Karte drucken - ja; } else if(val.compare("Y") == 0) // QSL gesendet - ja; addQslFlag((char *)"qslSvia","B"); // QSLs_via 'B' } setValue(buf,val); // val = "", R, Y, I } else { setValue(buf,val); // gefunden, default - value in arry eintragen } } else { // ----------------------------------- // QSL * LOTW strcpy(buf,token.toAscii()); strcpy(buf,getdbNameQsl(buf)); // adif_feldname übersetzen if(strlen(buf) != 0) { // falls Spalten_name gefunden, bearbeiten if(strcmp(buf,"eqsls") == 0) { // eQSL * eqsl_s if(val.compare("N") == 0) // (UcxL) N = noch nicht gesendet val = "R"; // setze R_equested else { if(val.compare("Y") == 0) { addQslFlag((char *)"qslSvia","E"); // QSLs_via 'E' setValueQsl(buf,val); // val eintragen R, Y } } } else // eQSL_r if(strcmp(buf,"eqslr") == 0) { if(val.compare("N") == 0) // (UcxL) N = noch nicht erhalten val = "R"; // setze Requested else { if(val.compare("Y") == 0) { // QSL erhalten ? addQslFlag((char *)"qslRvia","E"); // QSLr_via 'E' setValueQsl(buf,val); // val eintragen R, Y } } } else // -------------------------------// LOTW * lotqsl_r if(strcmp(buf,"lotqslr") == 0) { // --------------- if(val.compare("N") == 0) // (UcxL) n = nicht erhalten val = "R"; // setze R_equested else { if(val.compare("Y") == 0) { // QSL erhalten ? addQslFlag((char *)"qslRvia","L"); // QSLr_via 'L' setValueQsl(buf,val); // val eintragen R, Y } } } else // lotqsl_s if(strcmp(buf,"lotqsls") == 0) { if(val.compare("N") == 0) // (UcxL) N = noch nicht erhalten val = "R"; // setze R_equested else { if(val.compare("Y") == 0) { // QSL gesendet ? addQslFlag((char *)"qslSvia","L"); // QSLs_via 'L' setValueQsl(buf,val); // val eintragen R, Y } } } else setValueQsl(buf,val); // default } else { // ----------------------------- AWD_daten_satz strcpy(buf,token.toAscii()); strcpy(buf,getdbNameAwd(buf)); // adif_feldname nach dbname übersetzen if(strlen(buf) != 0) { // AWD_Type gefunden setValueAwd(buf,val); // value eintragen } else { // Fehler_text setzen Error += " Call "+getValue((char *)"rufz"); Error += " "+token; Error += " text < "+val; Error += " > nicht gefunden\n"; // tr() ?? state = 1; // es ist ein Fehler aufgetreten } } } // ein tocken bearbeitet } // WHILE( 1 ) <eor> nicht erreicht //-- ENDE_Adif_data_zeile -- <EOR> gefunden // fehlende Values nachtragen if(getValue((char *)"dxcc").count() == 0) { // falls dxcc_feld leer s = getValue((char *)"rufz"); // hole Rufzeichen n = 1; z = s.left(n); while(getla( z ) == 0) { if(n >= 4) { // unbekannt Error += "dxcc fuer Rufzeichen "+s+" nicht gefunden\n"; state = 1; // es ist ein Fehler aufgetreten break; } z = s.left(++n); } setValue((char *)"cn",Lcn); setValue((char *)"cqz",Cqz); setValue((char *)"ituz",Ituz); setValue((char *)"dxcc",Dxcc); } if(getValue((char *)"cn").count() == 0) { // falls Cont fehlt setValue((char *)"cn",Lcn); // setze continent } if(getValue((char *)"cqz").count() == 0) { // falls CQ_zone fehlt setValue((char *)"cqz",Cqz); // setze..CQzone } if(getValue((char *)"ituz").count() == 0) { // falls ITU_zone fehlt setValue((char *)"ituz",Ituz); // setze ..zone } if(getValue((char *)"etime").count() == 0) { // falls Ende_zeit fehlt setValue((char *)"etime", getValue((char *)"btime")); // setze = bzeit } s = s.setNum(hId); // portabel_id strcpy(buf,s.toAscii()); setValue((char *)"rig",rig); // ( ist für DRUCK erforderlich ) setValue((char *)"qline",(char *)"KW"); // kein ADIF_token - könnte leer bleiben setValue((char *)"quarter",buf); // ist ADIF_import_portabel_type setValue((char *)"op",(char *)"0"); // Operator intern_value z.Z.= 0 // ------ DEBUG /* n = 0; // TEST Data ausgeben i = 0; while(i != qsoFields) { qDebug() << adh[i].pos << adh[i].field << adh[i].adifnam << adh[i].value; i++; } n = 0; i = 0; while(i != qslFields) { qDebug() << adhq[i].pos << adhq[i].field << adhq[i].adifnam << adhq[i].value; i++; } n = 0; i = 0; while(i != awdFields) { qDebug() << adhw[i].pos << adhw[i].field << adhw[i].adifnam << adhw[i].value; i++; } //datei.close(); //return; */ // ----- DEBUG QSqlQuery query; // -- OM -------------------------------------------- alle LOG_Datensatze erzeugen qy = "SELECT omid FROM "+log+"om WHERE rufz='"; qy += Call; qy += "'"; query.exec(qy); n = query.size(); if(n == 0 ) { // ist der OM neu ? qy = "INSERT INTO "+log+"om VALUES (0,'"; // ja; qy += Call; qy += "','"; qy += adh[2].value; qy += "')"; QSqlQuery query; query.exec(qy); oid = query.lastInsertId().toInt(); // Datensatz merken } else { query.next(); oid = query.value(0).toInt(); } // -- QSO ------------------------------------------ n = 3; // starte auf index_pos_3 qy = "INSERT INTO "+log+" VALUES (0,"+s.setNum(oid)+",'"; qy += adh[0].value; // cept while(n != qsoFields -3 ) { // alle felder übernehmen qy += "','"; qy += adh[n++].value; } qy += "',"; qy += adh[n++].value; // quarter qy += ","; qy += adh[n++].value; // Operator qy += ")"; query.exec(qy); // Datensatz eintragen id = query.lastInsertId().toInt(); // -- QSL ------------------------------------------- n = 0; // starte auf index_pos_0 qy = "INSERT INTO "+log+"qsl VALUES (0,"+s.setNum(id)+",'"; qy += Call; qy += "','"+qsoDate; while(n != qslFields) { // alle felder übernehmen qy += "','"; qy += adhq[n++].value; } qy += "')"; query.exec(qy); // Datensatz eintragen // qDebug() << query.lastError(); // -- AWD ------------------------------------------- n = 0; while(n != awdFields) { // alle felder prüfen und übernehmen if(strlen(adhw[n].value) != 0) { // value eingetragen ? qy = "INSERT INTO "+log+"awd VALUES (0,"+s.setNum(id)+",'"; qy += Call; qy += "','"; qy += adhw[n].field; qy += "','"; qy += adhw[n].value; qy += "')"; query.exec(qy); // Datensatz eintragen } n++; // nächsten awd_type } count++; // 1 Datensatz kompl. bearbeitet - QSO_zähler +1 /* if(count == 1) { // TEST einen Datensatz bearbeiten datei.close(); return; } */ } datei.close(); return; }
/**************************************************************************** * MetaEdit * * meta bearbeiten ***************************************************************************/ bool MetaEdit(string dir) { int choice = -1; bool changed = false; dir += "meta.xml"; string line, quelltext; ifstream in(dir.c_str()); while(getline(in, line)) quelltext += line + "\n"; GuiWindow promptWindow(520,360); promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); promptWindow.SetPosition(0, -10); GuiImageData btnOutline(Theme.button_small); GuiImageData btnOutlineOver(Theme.button_small_focus); GuiTrigger trigA; trigA.SetSimpleTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); GuiImageData dialogBox(Theme.dialog_background); GuiImage dialogBoxImg(&dialogBox); TextLine meta; meta.text(quelltext, 18, 440); int i = 0; int y = 90; int place = 25; int number = 7; int startline = 0; GuiText upTxt("c", 22, (GXColor){Theme.text_1, Theme.text_2, Theme.text_3, 255}); upTxt.SetFont(symbol_ttf, symbol_ttf_size); upTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); upTxt.SetPosition(0, y -20); GuiText downTxt("d", 22, (GXColor){Theme.text_1, Theme.text_2, Theme.text_3, 255}); downTxt.SetFont(symbol_ttf, symbol_ttf_size); downTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); downTxt.SetPosition(0, y + (place * (number-1)) + 15); GuiButton * Entrie[number]; GuiText * EntrieTxt[number]; for(i=0; i < number && i < (signed)meta.line.size(); i++) { EntrieTxt[i] = new GuiText(meta.line[i].c_str(), 18, (GXColor) {Theme.text_1, Theme.text_2, Theme.text_3, 255}); EntrieTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); Entrie[i] = new GuiButton(440, 18); Entrie[i]->SetLabel(EntrieTxt[i]); Entrie[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); Entrie[i]->SetPosition(40, y); Entrie[i]->SetTrigger(&trigA); y += place; } GuiText titleTxt("meta.xml", 22, (GXColor){Theme.text_1, Theme.text_2, Theme.text_3, 255}); titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); titleTxt.SetPosition(0,40); GuiText backTxt(tr("OK"), 22, (GXColor){Theme.button_small_text_1, Theme.button_small_text_2, Theme.button_small_text_3, 255}); GuiImage backImg(&btnOutline); GuiImage backImgOver(&btnOutlineOver); GuiButton back(btnOutline.GetWidth(), btnOutline.GetHeight()); back.SetAlignment(ALIGN_CENTRE, ALIGN_BOTTOM); back.SetPosition(0, -25); back.SetLabel(&backTxt); back.SetImage(&backImg); back.SetImageOver(&backImgOver); back.SetTrigger(&trigA); back.SetState(STATE_SELECTED); promptWindow.Append(&dialogBoxImg); promptWindow.Append(&titleTxt); for(int x=0; x < i; x++) promptWindow.Append(Entrie[x]); if((signed)meta.line.size() >= number) { promptWindow.Append(&upTxt); promptWindow.Append(&downTxt); } promptWindow.Append(&back); HaltGui(); mainWindow->SetState(STATE_DISABLED); mainWindow->Append(&promptWindow); mainWindow->ChangeFocus(&promptWindow); ResumeGui(); while(choice == -1) { usleep(100); if(WPAD_ButtonsDown(0) & (WPAD_BUTTON_UP | WPAD_CLASSIC_BUTTON_UP) || PAD_ButtonsDown(0) & PAD_BUTTON_UP || WUPC_ButtonsDown(0) & WPAD_CLASSIC_BUTTON_UP) { startline = meta.text_up(); for(int x=0; x < i; x++) EntrieTxt[x]->SetText(meta.line[x + startline].c_str()); HaltResumeGui(); } if(WPAD_ButtonsDown(0) & (WPAD_BUTTON_DOWN | WPAD_CLASSIC_BUTTON_DOWN) || PAD_ButtonsDown(0) & PAD_BUTTON_DOWN || WUPC_ButtonsDown(0) & WPAD_CLASSIC_BUTTON_DOWN) { startline = meta.text_down(number); for(int x=0; x < i; x++) EntrieTxt[x]->SetText(meta.line[x + startline].c_str()); HaltResumeGui(); } if(back.GetState() == STATE_CLICKED) choice = 0; for(int x=0; x < i; x++) { if(Entrie[x]->GetState() == STATE_CLICKED) { Entrie[x]->ResetState(); string temp = meta.line[x + startline]; while((signed)temp.find("\n") != -1) temp.replace(temp.find("\n"), 1, "¶"); char new_text[256]; sprintf (new_text, "%s", temp.c_str()); OnScreenKeyboard(new_text, 256, true); mainWindow->SetState(STATE_DISABLED); promptWindow.SetState(STATE_DEFAULT); if(strcasecmp(new_text,"NULL") != 0 ) { changed = true; meta.line[x + startline] = new_text; while((signed)meta.line[x + startline].find("¶") != -1) meta.line[x + startline].replace(meta.line[x + startline].find("¶"), 1, "\n"); EntrieTxt[x]->SetText(meta.line[x + startline].c_str()); quelltext.clear(); for(int a = 0; a < (signed)meta.line.size(); a++) quelltext += meta.line[a]; meta.text(quelltext, 18, 440); for(int x=0; x < i; x++) EntrieTxt[x]->SetText(meta.line[x + startline].c_str()); } break; } } } if(changed) { ofstream datei(dir.c_str()); datei << quelltext; // for(int i = 0; i < (signed)meta.line.size(); i++) // datei << meta.line[i]; } HaltGui(); mainWindow->Remove(&promptWindow); mainWindow->SetState(STATE_DEFAULT); ResumeGui(); return choice; }