Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje

Programiranje Programski jezici, tehnike, alatke...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 19.3.2012, 20:46   #1
Demosten
Novi član
 
Član od: 30.1.2008.
Lokacija: Novi Sad
Poruke: 14
Zahvalnice: 6
Zahvaljeno 2 puta na 2 poruka
Talking Treba mi pomoć oko pisanja programa [C++]

Treba mi da napišem program [C++] koji će izvući određene podatke iz TXT fajlova i snimiti ih u fajl, tj u tabelu u određenom sheet-u u njemu. Razlog zašto to ne radim ručno je jer toga ima izuzetno mnogo(i fajlova i podataka u njima).
Idem prvo sa jednostavnijom varijantom:
Fajl izgleda ovako:



I iz njega bi mi trebale 3 ili 4 kolone sa podacima da se snime kao iste takve kolone u exel fajlu u određenom sheet-u. Recimo kolone ADAPS, MDAPS i HWAMS.

Da kasnije ne bi bilo "što odmah nisi sve rekao" evo ostatka problema:

U glavnom folderu imam dvadesetak podfoldera(podfolder1),a svaki od tih 20 podfoldera sadrži još 6-7 podfoldera(podfolder2) u kojima se nalaze fajlovi iz kojih treba izvući podatke. Fajlovi se uvek isto zovu (evaluate.out).
Ideja mi je da napravim program (uz nadam se vašu veliku pomoć ) koji bi se pokrenuo iz glavnog foldera(nije potrebno da bude u prozoru mislio sam da se pokreće iz command line-a, pretpostavljam da je to i jednostavnije), pročešljao podfoldere i u svakom od podfoldera1 napravio excel fajl (sa recimo imenom <evaluate - ime podfoldera1.xls>) gde bi u sheet sa imenom podfoldera2 smestio podatke izvučene iz evaluate fajla, koji se nalazio u tom podfolderu 2. Znači taj jedan excel fajl bi imao 6-7 sheet-ova.

Za početak me interesuje kako izvući te kolone sa podacima...

PS: Nisam početnik u programiranju, ali bi možda bilo dobro da me tako tretirate jer sam dobrano zarđao... Ovaj problem bih taman iskoristio da (ponovo) naučim C++.
Za početak me interesuje kako izvući te kolone sa podacima...

PS: Nisam početnik u programiranju, ali bi možda bilo dobro da me tako tretirate jer sam dobrano zarđao... Ovaj problem bih taman iskoristio da (ponovo) naučim C++.
Demosten je offline   Odgovor sa citatom ove poruke
Stara 19.3.2012, 21:23   #2
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Evo nesto na brzinu, mozda moze i bolje:

Recimo evaluate.txt je ovaj:
Kod:
1 97 1 1 MZ 84 -99 -99 -99 -99 162 ABC
1 31 1 1 MZ 84 -99 -99 -99 -99 107 ABC
1 42 1 1 MZ 84 -99 -99 -99 -99 184 ABC
1 56 1 1 MZ 84 -99 -99 -99 -99 111 ABC
ima 12 kolona i hoces da izvuces vrednost iz 2 i 11:

Kod:
#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>

int main()
{
    try
    {
        std::fstream in("evaluate.txt", std::ios::in);

        std::vector<std::string> vout;
        std::string line;
        while(std::getline(in, line))
        {
            std::stringstream sstr;
            sstr << line;
            std::string tmp, out;
            for(std::size_t i = 0; i < 12; ++i)
            {
                if(i == 1)
                {
                    sstr >> out;
                    out += ' ';
                }
                else if(i == 10)
                {
                    tmp.clear();
                    sstr >> tmp;
                    out += tmp;
                    vout.push_back(out);
                    out.clear();
                }
                else
                {
                    sstr >> tmp;
                }
            }
        }

        const auto& end = vout.end();
        auto it         = vout.begin();
        for(; it != end; ++it)
        {
            std::cout << *it << std::endl;
        }
    }
    catch (const std::exception& e)
    {
        std::cerr << e.what() << std::endl;
    }

    std::cin.ignore();
    return 0;
}
output:
Citat:
97 162
31 107
42 184
56 111
s'tim da prvo treba preskociti prvih par redova. E sad za setanje po folderima trazi po MSDN-u FindFirstFile i FindNextFile
Belphegor je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Belphegor na korisnoj poruci:
Demosten (21.3.2012)
Stara 20.3.2012, 15:00   #3
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Evo ti kompletnije resenje u attachmentu, src i test folderi, samo posaljes kao argument stazu do root foldera. Ako sam dobro razumeo strukturu kako si objasnio.

Koristio sam LibXL biblioteku za snimanje .xls dokumenata (TRIAL), nadji nesto bolje ili iplementiraj sam.

Ima na par mesta treba da se prepravi kod jer sam zbrcko na brzaka ali radi.
Priloženi fajlovi
Tip fajla: zip root_dir.zip (7,8 KB, 9 puta viđeno)
Tip fajla: zip excel_cpp.zip (1,9 KB, 12 puta viđeno)
Belphegor je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Belphegor na korisnoj poruci:
Demosten (21.3.2012)
Stara 20.3.2012, 18:52   #4
zokocx
Starosedelac
 
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.535
Zahvalnice: 868
Zahvaljeno 562 puta na 346 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Evo za sat vremena, bar sam naucio nesto novo, ovo ispalo lakse od skolskog primera.
Koristio sam free biblioteku za .xls fajlove, trebalo bi da odradjuje posao za ovakave simple stvari.
http://code.google.com/p/excellibrary/

Samo ubacis .exe i .dll u taj glavni folder pokrenes i sve ti ispise sta je uradio.
Ubacio sam neke osnovne provere, i javlja ako naleti na neki dzumbus u .OUT fajlovima.
Priloženi fajlovi
Tip fajla: zip Evaluate_bin.zip (54,0 KB, 8 puta viđeno)
Tip fajla: zip Evaluate_src.zip (59,6 KB, 11 puta viđeno)
zokocx je offline   Odgovor sa citatom ove poruke
Sledećih 2 korisnika se zahvaljuje korisniku zokocx na korisnoj poruci:
Belphegor (20.3.2012), Demosten (21.3.2012)
Stara 20.3.2012, 19:03   #5
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Kod:
using ExcelLibrary.SpreadSheet;
E kad bi bilo samo ovako jednostavno i u C++.

Treba mi pomoć oko pisanja programa [C++]

Mada je ocigledno da mu je za ovo bolje i brze resenje C#.
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 20.3.2012, 19:16   #6
zokocx
Starosedelac
 
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.535
Zahvalnice: 868
Zahvaljeno 562 puta na 346 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Mogao sam i da uradim preko COM Interop ali to bi zahtevalo da ima instaliranu odogovarajucu verziju MS office excel-a i kod izgleda malo glupavije, ovako radi i bez office-a.
Kod:
using Microsoft.Office.Interop.Excel;
http://msdn.microsoft.com/en-us/libr...=vs.80%29.aspx

Btw. nisi morao da radis da cita komandnu linuju, napisao je da moze i samo da se stavi u taj osnovni folder.

Ne znam kako se radi sa COM objektima u C++, ali sigurno je neko karabudzenje.
zokocx je offline   Odgovor sa citatom ove poruke
Stara 20.3.2012, 19:24   #7
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Jeste karabudzenje za C++, nailazio sam na neke primere, da se prekrstis nogom i rukom. A vidim neki predlazu csv pa da se posle importuje ali ne znam da li bi onda mogao u vise sheetova da rasporedi.

A pogledaj samo koliko kosta za ovaj LibXL:
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 20.3.2012, 19:29   #8
zokocx
Starosedelac
 
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.535
Zahvalnice: 868
Zahvaljeno 562 puta na 346 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Ufff koja cena, a za .NET ima tih free biblioteka kolko hoces cak i nije tolko tesko sa COM objektom, ali za razliko ovo treba da radi perfektno i imas podrsku dok ovo free sto sam ja upotrebio, samo sam pogledao na Issues deo na code.google i ima svasta od nemogucnosti otvaranja (u kodu) velikih fajlova do nekompatabilnosti sa razim verzijama Excela.
zokocx je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku zokocx na korisnoj poruci:
Demosten (21.3.2012)
Stara 20.3.2012, 20:10   #9
Todors
Član
 
Član od: 16.4.2010.
Lokacija: Pančevo
Poruke: 462
Zahvalnice: 41
Zahvaljeno 68 puta na 63 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Mislim da bih mu ovde CSV parser savršeno završio posao.

U C# bi kod izgledao ovako nešto: http://www.switchonthecode.com/tutor...edb-csv-parser ,

a za c++ srećno .
Todors je offline   Odgovor sa citatom ove poruke
Stara 20.3.2012, 20:36   #10
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Nasao sam nesto "free" http://www.codeproject.com/Articles/...Format-Library upravo prelistavam src. S'obzirom da mu treba bazicna funkcionalnost mozda ce moci nesto da iskopa.
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 21.3.2012, 0:22   #11
Demosten
Novi član
 
Član od: 30.1.2008.
Lokacija: Novi Sad
Poruke: 14
Zahvalnice: 6
Zahvaljeno 2 puta na 2 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Hvala puno svima na pomoći, pre sve pre svega Zokocx. Sada ću da ga skinem i probam.

Jeste da sam rekao C++, ali to je zato što sam mislio da iskoristim ovo kao priliku da se ponovo malo podučim programiranju i mislo sam da je dobra ideja da krenem od C-a. Nisam znao da li je iz nekog jezika to lakše ili teže uraditi.
Definitivno ovakvoj Zokocxooj pomoći ne smem da gledam u zube, pa makar da je pisao i u LILA-777, a pogotovo i zato što baš i nemam suviše vremena za sve.

Kada sredim ove podatke onda ću se udubiti da vidim, kako i da li se to moglo uraditi u C++ ili kom drugom jeziku...

Inače javim se uskoro za drugi deo problema.
Rekao sam na početku da je ovo lakši deo...
Demosten je offline   Odgovor sa citatom ove poruke
Stara 21.3.2012, 1:16   #12
zokocx
Starosedelac
 
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.535
Zahvalnice: 868
Zahvaljeno 562 puta na 346 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Pa nije bilo nesto tesko, realno da bi morao ovo da uradim u C++ dosta bi se pomucio, jer slabije poznajem jezik i jos slabije biblioteke.
Svaka cast Balphegor-u sto je probao to da uradi u C++, jedino da prepravi da program gleda samo foldere u folderu gde se pokrene i to je to.
zokocx je offline   Odgovor sa citatom ove poruke
Stara 21.3.2012, 3:40   #13
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

...i trebaju malo da se seckaju stringovi jer hoce da mu se generisani xls-ovi zovu kao i "podfolder1" a sheetovi "podfolder2_sheet", ali me mrzelo. To je ionako malo posla.
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 22.3.2012, 12:25   #14
Demosten
Novi član
 
Član od: 30.1.2008.
Lokacija: Novi Sad
Poruke: 14
Zahvalnice: 6
Zahvaljeno 2 puta na 2 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Uf, konačno sam uspeo da ga nateram da radi...
Najveći problem je bio što nisam uspevao da pročitam koju grešku prijavljuje zbog teget boje slova na crnoj pozadini.
Neku grešku bi mi prijavljvao, neke excel fajlove bi napravio, kada bih probao da ih otvorim Excel bi mi javljao da nisu ispravni, da su koruptovani...
Na kraju sam otkrio tek uz pomoć screenshoot-a i photoshop-a...
Prijavljivao mi je više od jednog .out fajla u folderu.
Greška je do mene jer niste imali sve informacije. U krajnjim direktorijumima je bilo više .OUT fajlova, ne samo Evaluate.out nego i SoilWatBal.out i Overview.out, što Zokocx nije znao kada je pravio proveru da li ima više .OUT falova. A podaci u SoilWatBal(koji je inače drugi deo problema) i Overview nisu istog formata kao u Evaluate iako su isto TXT fajlovi.
Malo sam pročačkao kod i uspeo da ga nateram da proradi. A koliko vidim radi savršeno. Još jednom hvala.

Evo ovde je bila "greška"(boldovao sam "problem"):
Kod:
                   foreach (string sub2Dir in DataDirStruct[sub1Dir])
                {
                    string SheetName = Path.GetFileNameWithoutExtension(sub2Dir);
                    string[] inFile = Directory.GetFiles(sub2Dir, "*.OUT", SearchOption.TopDirectoryOnly);
                    // if there's more than one .OUT file in subdir2
                    if (inFile.Length > 1)
                    {
                        Console.ForegroundColor = ConsoleColor.DarkBlue;
                        Console.WriteLine("Subdir2: " + sub2Dir + "\ncontains more than 1 .OUT files for evaluation\nOnly sheet for first file can be created!");
                        Console.WriteLine("Continue? (Y/N)");
                        ConsoleKeyInfo cki = Console.ReadKey(false);
                        if (cki.Key == ConsoleKey.N)
                            return;
                    }
                    // just process first one .OUT file
                    else if(inFile.Length > 0)
                    {
                        // sheet for subdir2
                        worksheet = new Worksheet(SheetName);
                        using (StreamReader inStream = new StreamReader(inFile[0]))
                        {
                            // Move to line 4
                            for (int i = 0; i < 3; i++)
A ovako sam ga "ispravio". Verujem da postoji i elegantniji i bolji naćin, ali zadovoljan sam što sam i ovo uspeo sam (boldovao sam ispravku)
Kod:
               foreach (string sub2Dir in DataDirStruct[sub1Dir])
                {
                    string SheetName = Path.GetFileNameWithoutExtension(sub2Dir);
                    string[] inFile = Directory.GetFiles(sub2Dir, "Evaluate.OUT", SearchOption.TopDirectoryOnly);
                    // if there's more than one .OUT file in subdir2
                    if (inFile.Length > 1)
                    {
/*                        Console.ForegroundColor = ConsoleColor.DarkBlue;
                        Console.WriteLine("Subdir2: " + sub2Dir + "\ncontains more than 1 .OUT files for evaluation\nOnly sheet for first file can be created!");
                        Console.WriteLine("Continue? (Y/N)");
                        ConsoleKeyInfo cki = Console.ReadKey(false);
                        if (cki.Key == ConsoleKey.N)
                            return;
*/                    }
                    // just process first one .OUT file
                    else if(inFile.Length > 0)
                    {
                        // sheet for subdir2
                        worksheet = new Worksheet(SheetName);
                        using (StreamReader inStream = new StreamReader(inFile[0]))
                        {
Samo sam * zamenio sa Evaluate i stavio u komentar IF deo koda posle...
Demosten je offline   Odgovor sa citatom ove poruke
Stara 22.3.2012, 13:01   #15
zokocx
Starosedelac
 
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.535
Zahvalnice: 868
Zahvaljeno 562 puta na 346 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Stavio sam ja proveru da li ima vise .OUT fajlova, malo nisam pazio na boju texta
Kod:
  Console.ForegroundColor = ConsoleColor.DarkBlue;
                        Console.WriteLine("Subdir2: " + sub2Dir + "\ncontains more than 1 .OUT files for evaluation\nOnly sheet for first file can be created!");
Recimo da se bolje vidi moze da bude zuta
Kod:
Console.ForegroundColor = ConsoleColor.Yellow;
Ali ovo je manje vise obavestajna poruka, program ce uzeti da obradi 1. .OUT fajl koji bude u nizu izgleda da sreca dobro sluzi, Evaluate.out je pre ova dva ostala. A to sto prijavi gresku je jer se u ostalim .OUT fajlovima u tim kolkonama ne nalazi ceo broj i tu se corruptuje .xls fajl.
Da si samo spomenuo da svi ti fajlovi se zovu Evaluate.out, uradio bi kako treba.

Evo nabrzinu ispravljeno sad gleda samo jedan jedini evaluate.out (velika/mala slova fajla nisu bitna).
Priloženi fajlovi
Tip fajla: zip Evaluate.zip (54,0 KB, 9 puta viđeno)
zokocx je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku zokocx na korisnoj poruci:
Demosten (22.3.2012)
Stara 22.3.2012, 13:08   #16
Demosten
Novi član
 
Član od: 30.1.2008.
Lokacija: Novi Sad
Poruke: 14
Zahvalnice: 6
Zahvaljeno 2 puta na 2 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Citat:
zokocx kaže: Pregled poruke
program ce uzeti da obradi 1. .OUT fajl koji bude u nizu izgleda da sreca dobro sluzi, Evaluate.out je pre ova dva ostala. A to sto prijavi gresku je jer se u ostalim .OUT fajlovima u tim kolkonama ne nalazi ceo broj i tu se corruptuje .xls fajl.
Ne samo da se tu ne nalazi ceo broj, nego nema ni kolona

Citat:
zokocx kaže: Pregled poruke
Da si samo spomenuo da svi ti fajlovi se zovu Evaluate.out, uradio bi kako treba.
Mislio sam da jesam, sada kada sam ponovo pročitao prvi post, video sam da sam bio dosta neodređen i nedovoljno precizan...

Citat:
zokocx kaže: Pregled poruke
Evo nabrzinu ispravljeno sad gleda samo jedan jedini evaluate.out (velika/mala slova fajla nisu bitna).
Hvala još jednom ...
Demosten je offline   Odgovor sa citatom ove poruke
Stara 22.3.2012, 13:46   #17
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Vidim iz tvojih ranijih postova da se bavis "medicinom", nadam se samo da ti je ovaj projekat edukativnog tipa, jer ako ga budes koristio u druge svrhe jedna greska moze da kosta nekog pacijenta zivota!
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 22.3.2012, 16:26   #18
Demosten
Novi član
 
Član od: 30.1.2008.
Lokacija: Novi Sad
Poruke: 14
Zahvalnice: 6
Zahvaljeno 2 puta na 2 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Citat:
Belphegor kaže: Pregled poruke
Vidim iz tvojih ranijih postova da se bavis "medicinom", nadam se samo da ti je ovaj projekat edukativnog tipa, jer ako ga budes koristio u druge svrhe jedna greska moze da kosta nekog pacijenta zivota!
Da tada je bila medicina, tačnije medicinske labaratorije, ali na svu sreću više nije...
Sada je u pitanju agronomija, tako da ako nešto omašim može samo da nam izrastu ruke na leđima od onoga što pojedemo...
Demosten je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku Demosten na korisnoj poruci:
Belphegor (22.3.2012)
Stara 22.3.2012, 16:44   #19
Belphegor
V.I.P. Programiranje
 
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Pao sam sa stoilice..
Belphegor je offline   Odgovor sa citatom ove poruke
Stara 22.3.2012, 18:49   #20
zokocx
Starosedelac
 
Član od: 8.4.2006.
Lokacija: Beograd
Poruke: 2.535
Zahvalnice: 868
Zahvaljeno 562 puta na 346 poruka
Određen forumom Re: Treba mi pomoć oko pisanja programa [C++]

Zato sam ja stavio tamo GPL licencu, bez garancije , a i meni nece nist da izraste ja jedem domacu hranu
zokocx je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi

Alatke vezane za temu
Vrste prikaza

Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


Slične teme
tema temu započeo forum Odgovora Poslednja poruka
Pomoć u vezi brisanja programa jokics Kvarovi 4 31.12.2009 10:16
Pomoć oko programa za mountovanje imagea Hold Aplikativni softver 6 2.7.2009 11:59
Pomoć! Treba li nešto promeniti? AcaDS1989 ŠDK - Osnovne komponente 8 26.11.2008 0:08
Pomoć! Treba mi driver za webcam... stallich Ostale komponente 2 27.10.2008 15:10
Kako postici anonimnost kod koriscenja P2P programa The Finest Serbian Since '82 Internet tehnologije 31 7.8.2007 1:35


Sva vremena su po Griniču +2 h. Sada je 6:07.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2021, vBulletin Solutions, Inc.
Hosted by Beograd.com