Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



prosba - malá utilitka na převod CSV souborů

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: prosba - malá utilitka na převod CSV souborů

Autor: tc2 ♂

15:56:09 18.02.2014

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace MalaUtilitka
{
class Program
{
static void Main(string[] args)
{
int grouping;
if (args == null || args.Length != 3) Usage();
else if (!File.Exists(args[0])) Usage();
else if (!Directory.Exists(Path.GetDirectoryName(args[1]))) Usage();
else if (!int.TryParse(args[2], out grouping) || grouping < 1) Usage();
else Doit(args[0], args[1], grouping);
}
static void Doit(string src, string trg, int grp)
{
string line;
using (var sr = new StreamReader(src))
using (var sw = new StreamWriter(trg))
{
line = sr.ReadLine();
if (line == null) return;
sw.WriteLine(line);
int ncol = line.Trim(',').Split(',').Length;
for (; AddGrp(sr, sw, grp, ncol); ) ;
}
}
static bool AddGrp(StreamReader sr, StreamWriter sw, int grp, int len)
{
string line = null;
int i, n;
var buf = new double[len];
for (n = 0; n < grp && null != (line = sr.ReadLine()); n++)
{
i = 0;
foreach (var ln in line.Split(','))
{
double v;
if (i < len && double.TryParse(ln, out v)) buf[i] += v;
i++;
}
}
if (n == 0) return false;
foreach (var b in buf) sw.Write((b / n).ToString("f6") + ",");
sw.WriteLine();
return line != null;
}
static void Usage() { Console.WriteLine("Usage: MalaUtilitka input_file otput_file grouping"); }
}
}

Citovat příspěvek

 

Re: prosba - malá utilitka na převod CSV souborů

Autor: P ♂

17:59:25 15.10.2013

1. stahnu a nainstaluji treba Gawk pro Windows (http://gnuwin32.sourceforge.net/packages/gawk.htm). Nainstaluje se vcetne dokumentace, nicmene ta je i na netu

2. script pro AWK:

BEGIN {
FS = ","; OFS = ",";
}
NR > 1 {
pocet++; soucet += $4;
if (pocet == 10) {
print $1,$2,$3,soucet/pocet,$5;
pocet = 0; soucet = 0;
}
}
END {
if (pocet != 0)
{
print $1,$2,$3,soucet/pocet,$5;
}
}

ulozim do souboru (napr. juhele.awk). Muze si vytvorit ruzne scripty (viz pozadavek)

3. z command line pustim (nebo to dam do batche)

awk -f juhele.awk juhele.txt>vystup.txt

juhele.txt - vstup
vystup.txt - vystup

Podotykam, ze s awk nedelam, pouzil sem to kdysi na neco podobneho.

Sem zvedavy na tvoje reseni.

Citovat příspěvek

 

Re: prosba - malá utilitka na převod CSV souborů

Autor: aEFQWERQWRQWER ♂

15:32:10 15.10.2013

P napsal/a

AWK
viz napr. http://cs.wikipedia.org/wiki/AWK



vsechny tyto reakce jsou na miste:




prezdivka P jako ......?!?!?!

Citovat příspěvek

 

Re: prosba - malá utilitka na převod CSV souborů

Autor: P ♂

8:13:41 15.10.2013

AWK
viz napr. http://cs.wikipedia.org/wiki/AWK

Citovat příspěvek

 

prosba - malá utilitka na převod CSV souborů

Autor: Juhele ♂

21:33:47 10.10.2013

čauky,
je mi to až trapné tu takhle somrovat, ale dost by mi to pomohlo a myslím, že průměrný programátor to musí zvládnout "levou zadní"

Máme v rámci výzkumu různé přístroje, z nichž jako výstup získám CSV/TXT soubor obsahující klasicky data - první řádek popisky sloupců, v dalších pak data - např.:

Lat_deg,Lon_deg,Gtm_sec,Value_1,Value_2,
49.1470985,13.3299150,24300,3.400,0.196,
49.1470985,13.3299169,24301,3.286,0.187,
49.1470985,13.3299169,24302,3.364,0.193,
49.1470985,13.3299169,24303,3.304,0.188,

přičemž bych potřeboval např. ze souboru s měřeními po vteřině udělat soubor s průměry za 10s - tj. zprůměrovat zadanou veličinu - např. "Value_1" z 10ti řádků a tuto hodnotu zapsat do výstupního souboru (taktéž CSV, stejná struktura, název tak, aby nepřemazal zdrojový - např. místo "XYZ.txt" "XYZ_output.txt"), přičemž ostatní parametry by se použily z posledního řádku průměrované skupiny.

Takto bych tedy získal mnohem menší soubor obsahující parametry např. každého desátého bodu, s zprůměrovanou hodnotou sledovaného parametru. Potřebuju, aby to byla nějaká jednoduchá utilitka, kterou by např. s použitím vhodného BAT nebo config souboru mohl použít totální neznalec, který by jen vhodně umístil zdrojová data a pouhým spuštěním utilitky nechal data přežvýkat.

Ideálně, kdyby základní EXE (potřebuju to hlavně na winy) mělo soubor parametrů v jiném souboru, takže bych si jeho editací mohl připravit rutiny pro výstupy z různých přístrojů (kde se veličiny jmenují jinak) a např. pro různé úseky - každých 10, každé 2 atd.

Pokud byste mne mohli aspoň navést na něco hotového, co bych mohl použít, nebo jestli už něco takového máte, moc by se mi to hodilo.

díky

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: