int Tmain(int argc, FSTCHAR **argv) { CPFSFile infile; /* viit sisendfailile */ CPFSFile outf, errf; /* viidad v@ljundfailidele */ CPFSFile lgrf; /* viit lõpugruppide failile LGR*/ FSXSTRING inbuf; /* toodeldav rida */ FSXSTRING outbuf; /* toodeldav rida */ CFSFileName fn0=argv[1]; CFSFileName fn1=argv[2]; CFSFileName fn2=argv[3]; CFSFileName fn3=FSTSTR("lgr"); int total, converted, unknown; int k; int kk, era, k2, k3; FSXSTRING inbuf_era, inbuf_para_ind; converted = unknown = 0; if (argc != 4) { printf("kirjuta paras arv parameetreid või keri poti laadale\n"); return EXIT_FAILURE; } if (infile.Open( fn0, FSTSTR("rb" )) == false || outf.Open( fn1, FSTSTR("wb" )) == false || errf.Open( fn2, FSTSTR("wb" )) == false || lgrf.Open( fn3, FSTSTR("ab+")) == false) { printf( "Can't open files\n" ); // fopen exit( 1 ); } loe_lgr( &lgrf ); /* loe lõpugrupid mällu */ tyvi[0].tyv = FSxSTR(""); for (total=0; infile.ReadLine(&inbuf)==true; total++) { kk = inbuf.Find(FSxSTR(".0!")); if (kk!=-1) /* on 0-muuttyybi sõna */ { tyybinr = 1; /* lihtsalt et poleks 0 */ k2 = inbuf.Find(FSxSTR("!\\")); if (k2!=-1) { FSXSTRING tmp; tmp = (const FSxCHAR *)inbuf.Mid(k2+2); k3 = tmp.Find(FSxSTR("\\")); if (k3!=-1) { sliik = (const FSxCHAR *)tmp.Left(k3); } } if (k2==-1 || k3==-1) { unknown++; if ((errf.WriteString((const FSxCHAR *)inbuf, inbuf.GetLength())) == false) { printf("\ntulemuse kirjut. error-faili ebaõnnestus"); return EXIT_FAILURE; } continue; /* vt järgmisi ridu */ } k = nomnul( &inbuf ); if (!k) { unknown++; if ((errf.WriteString((const FSxCHAR *)inbuf, inbuf.GetLength())) == false) { printf("\ntulemuse kirjut. error-faili ebaõnnestus"); return EXIT_FAILURE; } continue; /* vt järgmisi ridu */ } converted++; lisa_lgr( &lgrf ); /* leiab igale selle parad tyvele lgr nr */ tee_rida(&inbuf, &outbuf); /* teeb rea nr|tyvi,lgr/tyvi,lgr... */ if ((outf.WriteString((const FSxCHAR *)outbuf, outbuf.GetLength())) == false) { printf("\ntulemuse kirjut. väljundfaili ebaõnnestus"); return EXIT_FAILURE; } nullityv(); /* et saaks järgmist parad. teha */ continue; /* et ei vaataks nii, nagu 'norm' ridu */ } era = inbuf.Find(FSxSTR("**")); inbuf_era = FSxSTR(""); if (era != -1) inbuf_era = (const FSxCHAR *)inbuf.Mid(era-1); inbuf = (const FSxCHAR *)inbuf.Left(inbuf.GetLength()-inbuf_era.GetLength()); kk = inbuf.Find(FSxSTR("&&")); inbuf_para_ind = FSxSTR(""); if (kk != -1) inbuf_para_ind = (const FSxCHAR *)inbuf.Mid(kk); inbuf = (const FSxCHAR *)inbuf.Left(inbuf.GetLength()-inbuf_para_ind.GetLength()); k = era_ind( &inbuf ); if (!k) /* oli mingi viga */ { unknown++; if ((errf.WriteString((const FSxCHAR *)inbuf, inbuf.GetLength())) == false) { printf("\ntulemuse kirjut. error-faili ebaõnnestus"); return EXIT_FAILURE; } continue; /* vt järgmisi ridu */ } k = era_reegel( &inbuf ); if (!k) /* oli mingi viga */ { unknown++; if ((errf.WriteString((const FSxCHAR *)inbuf, inbuf.GetLength())) == false) { printf("\ntulemuse kirjut. error-faili ebaõnnestus"); return EXIT_FAILURE; } continue; /* vt järgmisi ridu */ } k = era_tyvi( &inbuf ); if (!k) /* oli mingi viga */ { unknown++; if ((errf.WriteString((const FSxCHAR *)inbuf, inbuf.GetLength())) == false) { printf("\ntulemuse kirjut. error-faili ebaõnnestus"); return EXIT_FAILURE; } continue; /* vt järgmisi ridu */ } k = tee_para( ); if (!k) /* oli mingi viga */ { unknown++; nullityv(); /* et saaks järgmist parad. teha */ if ((errf.WriteString((const FSxCHAR *)inbuf, inbuf.GetLength())) == false) { printf("\ntulemuse kirjut. error-faili ebaõnnestus"); return EXIT_FAILURE; } continue; /* vt järgmisi ridu */ } if ( kk != -1 ) /* leidub parall. indeks */ { inbuf_para_ind = (const FSxCHAR *)inbuf_para_ind.Mid(2); if (inbuf_para_ind.Find(FSxSTR("."))==-1) { /* => on uus sonaliik; => salvest. senine*/ lisa_lgr( &lgrf ); /*leiab igale selle parad tyvele lgr nr */ tee_rida(&inbuf, &outbuf); /* teeb rea nr|tyvi,lgr/tyvi,lgr... */ if ((outf.WriteString((const FSxCHAR *)outbuf, outbuf.GetLength())) == false) { printf("\ntulemuse kirjut. väljundfaili ebaõnnestus"); return EXIT_FAILURE; } nullityv(); /* et saaks järgmist parad. teha */ era_tyvi( &inbuf ); /* nullityv() oli ka tyved kaotand */ } k = era_ind(&inbuf_para_ind); if (!k) /* oli mingi viga */ { unknown++; if ((errf.WriteString((const FSxCHAR *)inbuf, inbuf.GetLength())) == false) { printf("\ntulemuse kirjut. error-faili ebaõnnestus"); return EXIT_FAILURE; } continue; /* vt järgmisi ridu */ } k = era_reegel( &inbuf_para_ind ); if (!k) /* oli mingi viga */ { unknown++; if ((errf.WriteString((const FSxCHAR *)inbuf, inbuf.GetLength())) == false) { printf("\ntulemuse kirjut. error-faili ebaõnnestus"); return EXIT_FAILURE; } continue; /* vt järgmisi ridu */ } if (inbuf_para_ind.Find(FSxSTR("(")) == 0) { for (k=0; tyvi[k].tyv.GetLength() > 0; k++) tyvi[k].sulg = 1; } k = par_para( ); if (!k) /* oli mingi viga */ { unknown++; nullityv(); /* et saaks järgmist parad. teha */ if ((errf.WriteString((const FSxCHAR *)inbuf, inbuf.GetLength())) == false) { printf("\ntulemuse kirjut. error-faili ebaõnnestus"); return EXIT_FAILURE; } continue; /* vt järgmisi ridu */ } } if ( era != -1 ) /* leidub ka erandeid */ { inbuf_era = (const FSxCHAR *)inbuf_era.Mid(3); k = nomerand( &inbuf_era ); if (!k) /* oli mingi viga */ { unknown++; if ((errf.WriteString((const FSxCHAR *)inbuf, inbuf.GetLength())) == false) { printf("\ntulemuse kirjut. error-faili ebaõnnestus"); return EXIT_FAILURE; } continue; /* vt järgmisi ridu */ } } converted++; lisa_lgr( &lgrf ); /* leiab igale selle parad tyvele lgr nr */ tee_rida(&inbuf, &outbuf); /* teeb rea nr|tyvi,lgr/tyvi,lgr... */ if ((outf.WriteString((const FSxCHAR *)outbuf, outbuf.GetLength())) == false) { printf("\ntulemuse kirjut. väljundfaili ebaõnnestus"); return EXIT_FAILURE; } nullityv(); /* et saaks järgmist parad. teha */ /*STAT:*/ /* tooseisu v@ljastamine ekraanile */ if ( total % 100 == 0 ) printf( "\r KOKKU: %6d KORRAS: %6d SEGASEID: %6d ", total, converted, unknown ); } /*FILE_END:*/ printf( "\r KOKKU: %6d KORRAS: %6d SEGASEID: %6d ", total, converted, unknown ); Tprintf( FSTSTR("** NOM: %s\n"), (const FSTCHAR*)fn0 ); infile.Close(); outf.Close(); errf.Close(); lgrf.Close(); return EXIT_SUCCESS; }
void MKLASSID2DCT::Run( DCTMETASTRCT& meta, ///< Sõnastiku struktuurihoidla const TAGS2DCT& tags ///< Ühestamismärgendite massiiv ) { CPFSFile in; if(in.Open(FSTSTR("klassid.txt"), FSTSTR("rb"))==false) throw VEAD( ERR_HMM_MOOTOR, ERR_RD, __FILE__, __LINE__, " ", "Jama andmefaili klassid.txt avamisega"); CFSAString rida; // tõsta kohe sõnastikku ümber... int n, reaNr, kokkuRidu; long pos=meta.Tell(); meta.Add(DCTELEMID_T3M_KLASSID, pos); if(in.ReadLine(&rida)==false) throw VEAD( ERR_HMM_MOOTOR, ERR_RD, __FILE__, __LINE__, " ", "Jama andmefaili klassid.txt lugemisega"); sscanf((const char*)rida, "%d", &kokkuRidu); if(meta.WriteUnsigned<UB4, int>(kokkuRidu)==false) // mitmsusklasside arv throw VEAD( ERR_HMM_MOOTOR, ERR_WRITE, __FILE__, __LINE__, " ", "Jama pakitud sõnastikku kirjutamisega"); for(reaNr=1; in.ReadLine(&rida)==true; reaNr++) { printf("%06d:%06d\r", kokkuRidu, reaNr); int tyhik, vordus; rida += " "; if((tyhik=(int)rida.Find(' '))<0) throw VEAD( ERR_HMM_MOOTOR, ERR_RD, __FILE__, __LINE__, " ", "Jama andmefaili klassid.txt lugemisega"); if(sscanf((const char*)rida, "%d", &n)!=1) throw VEAD( ERR_HMM_MOOTOR, ERR_RD, __FILE__, __LINE__, " ", "Jama andmefaili klassid.txt lugemisega"); meta.WriteUnsigned<UB1, int>(n); // jooksva mitmesusklassi suurus for(int i=0; i<n; i++) { if((vordus=(int)rida.Find('=', tyhik+1))<=tyhik+1) throw VEAD( ERR_HMM_MOOTOR, ERR_RD, __FILE__, __LINE__, " ", "Jama andmefaili klassid.txt lugemisega", (const char*)rida); CFSAString tagStr=rida.Mid(tyhik+1, vordus-tyhik-1); int tagIdx=tags.GetIdx(&tagStr); if(tagIdx<0) throw VEAD( ERR_X_TYKK, ERR_ROTTEN, __FILE__, __LINE__, " ", "Tundmatu ühestamismärgend andmefailis klassid.txt ", (const char*)rida); if(meta.WriteUnsigned<UB1,int>(tagIdx)==false) throw VEAD( ERR_HMM_MOOTOR, ERR_WRITE, __FILE__, __LINE__, " ", "Jama pakitud sõnastikku kirjutamisega"); UKAPROB tagProb; if(sscanf(((const char*)rida)+vordus+1, "%e", &tagProb)!=1) throw VEAD( ERR_X_TYKK, ERR_ROTTEN, __FILE__, __LINE__, " ", "Puuduv tõenäosus failis klassid.txt ", (const char*)rida); if(meta.WriteBuffer(&tagProb,sizeof(UKAPROB))==false) throw VEAD( ERR_HMM_MOOTOR, ERR_WRITE, __FILE__, __LINE__, " ", "Jama pakitud sõnastikku kirjutamisega"); if((tyhik=(int)rida.Find(' ', tyhik+1))<=0) throw VEAD( ERR_HMM_MOOTOR, ERR_RD, __FILE__, __LINE__, " ", "Jama andmefaili klassid.txt lugemisega"); if(vordus >= tyhik) throw VEAD( ERR_HMM_MOOTOR, ERR_RD, __FILE__, __LINE__, " ", "Jama andmefaili klassid.txt lugemisega"); } } printf("\n"); }
int main(int argc, FSTCHAR **argv) { CFSFileName inDCT, outDCT, inPRF, outPRF, outSL; const FSTCHAR *outS6Nlaiend = FSTSTR(".s6n"); // for(argc--, argv++; argc > 0; argc--, argv++) { if(argv[0][0]==(FSTCHAR)'-' && argv[0][1]==(FSTCHAR)'d') { inDCT=argv[0]+2; int punkt=inDCT.Find((FSTCHAR)'.'); outDCT = (punkt== -1) ? inDCT + outS6Nlaiend : inDCT.Left(punkt) + outS6Nlaiend; } else if(argc > 0 && argv[0][0]==(FSTCHAR)'-' && argv[0][1]==(FSTCHAR)'p') { inPRF=argv[0]+2; int punkt=inPRF.Find((FSTCHAR)'.'); outPRF = (punkt== -1) ? inPRF + outS6Nlaiend : inPRF.Left(punkt) + outS6Nlaiend; } else if(argc > 0 && argv[0][0]==(FSTCHAR)'-' && argv[0][1]==(FSTCHAR)'j') { outSL=argv[0]+2; } else { printf(FSTSTR("%s: jama lipp\n"), argv[0]); return EXIT_FAILURE; } } // // 1. ring: teeme sõnaliigujärjendite (2nd)tabeli // TeeS6naLiikideTabel(inDCT); TeeS6naLiikideTabel(inPRF); // // 2.ring: indeksid asemele // printf(FSTSTR("--> ")); PaneIndeksidAsemele(inDCT, outDCT); PaneIndeksidAsemele(inPRF, outPRF); // // sõnaliikide 2ndtabel ka teksti faili // iga tabeli element ise real // int i; CPFSFile sl; printf(FSTSTR("%s\n"), (const FSTCHAR *)outSL); if(sl.Open(outSL, FSTSTR("wb+"))==false) { printf(FSTSTR("\n%s: ei saa faili luua\n"), (const FSTCHAR *)outSL); return EXIT_FAILURE; } RIDA *slptr; printf(FSTSTR(" %d erinevat sõnaliigijärjendit\n"), sonaliikideMassiiv.idxLast); for(i=0; (slptr=sonaliikideMassiiv[i])!=NULL; i++) { (*slptr) += FSxSTR("\n"); const FSxCHAR *slstr = (const FSxCHAR *)(*slptr); const int len = slptr->GetLength(); sl.WriteString(slstr, len); } sl.Close(); printf(FSTSTR("\n")); return EXIT_SUCCESS; }