Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Roztřídění textu podle stanovených pravidel

Ahoj, snad pochopíte o co mi jde.

Dělám si takový archív, ukládal jsem si za několik let historii jedné konverzace z ICQ, takže jsem získal několik txt souborů, kde jsou všechny ty konverzace uloženy. Od začátku roku až po konec. Je toho materiálu hrozně moc a vypadá to takto:

--------------------------------------<-
A (12:48:50 1/01/2011)
"ukázkový text"

-------------------------------------->-
B (12:49:00 1/01/2011)
"ukázkový text"

--------------------------------------<-
A (12:49:08 1/01/2011)
"ukázkový text"
.
.
.
-------------------------------------->-
B (12:49:25 6/01/2011)
"ukázkový text"
--------------------------------------<-
A (12:49:32 6/01/2011)
"ukázkový text"

(Jména uživatelů jsem nahradil A a B)

Hledám nějaký program nebo fintu, která by mi ušetřila práci a dokázala tento celý texťák roztřídit na jednotlivá data, kdy byly konverzace vytvořeny. Takže by se nejlépe vytvořil nový txt soubor - název "1/01/2011" a tam byly jen konverzace z tohoto data. Poté další - "6/01/2011" atd..

Chci si ušetřit mnoho práce s tříděním. Také bych chtěl třeba hromadně vymazat některé nežádoucí prvky (např.-------------------------------------->-).

Děkuji vám za váš čas.

Předmět Autor Datum
Takže udělám ti na to pomocný program. Program vytvoří JEDEN Excelový dokument v csv. csv si už násl…
Flash_Gordon 07.05.2014 15:51
Flash_Gordon
Tak tady je ten program: http://pc.poradna.net/file/view/18302-createsingle document-exe Musíš ho…
Flash_Gordon 07.05.2014 16:18
Flash_Gordon
Otevřu program jako správce, nalistuju adresář - místní disk c - objeví se hláška: ...Proces nemůže…
Android 07.05.2014 21:01
Android
Ok, zvolím adresář, kde najdu txt soubor a spustím vytvořený soubor document.csv. Historie se přesun…
Android 07.05.2014 21:19
Android
:-( Jestliže jsi uvedl pravdivé údaje, měl bys mít v dokumentu něco takového: [http://pc.poradna.n…
Flash_Gordon 08.05.2014 08:01
Flash_Gordon
Ajajaj. Ale kde je samotná konverzace ?! Na tu jsem totiž zapomněl ! Takže verze prográmku 2, která…
Flash_Gordon 08.05.2014 08:51
Flash_Gordon
to uložení do c:\ je nešťastný. myslíš že by to reagovalo na shell:Common Desktop, shell:Desktop, %U…
kmochna 08.05.2014 10:04
kmochna
Takto. Ve hře je příliš mnoho proměnných. :-D To s %USERPROFILE%\Desktop nefunguje. Přesněji nefun…
Flash_Gordon 08.05.2014 11:31
Flash_Gordon
Protože disk C (respektive disk se systémem Windows) je privilegovaný v tom, že programy již nesmějí…
pme 08.05.2014 11:41
pme
Ano. Správně upřesnění. Nehádám se :-) To bych mu tam musel na disku C vytvořit nějaký adresář v tom…
Flash_Gordon 08.05.2014 11:46
Flash_Gordon
Neviem ako dlho programuješ a čo konkrétne programuješ, ale %USERPROFILE% to "istí"... Len sa prosím…
pme 08.05.2014 11:49
pme
pme má krutou pravdu. krutou pravdu administrátora. používej proměnné a ne přímé cesty, dokonce do r…
kmochna 08.05.2014 12:13
kmochna
tak tu vychytávku použij, msdn.microsoft.com, z časového hlediska se to nevyplatí- jen nenasereš sys…
kmochna 08.05.2014 19:07
kmochna
Omlouvám se, ale myslím, že mi to nepomůže. Možná jsem ten problém špatně vysvětlil. Radši to vysvět…
Android 08.05.2014 12:07
Android
Tak reaguji taky schválně až po několika dnech. Někteří tady jenom píší, ale nic nedělají. Kdybych b…
Flash_Gordon 10.05.2014 10:41
Flash_Gordon
v pořádku, nezlob se uštěpačnosti. asi bych tě neměl nasírat výpisem ze sua (podařilo se ti trefit i…
kmochna 10.05.2014 11:25
kmochna
[http://pc.poradna.net/file/view/18335-kmochna-png]
Flash_Gordon 10.05.2014 12:19
Flash_Gordon
máš to kostrbatý.
kmochna 10.05.2014 12:24
kmochna
Ano, nebyl jsem tu několik dnů, omlouvám se všem, koho to urazilo. Předhodil jsem novému prográmku…
Android 12.05.2014 09:14
Android
Pisi z mobilu naslepo. Tak uz to chodi, kdyz nejsou k dispozici cela data a pise se to naslepo. jako… poslední
Flash_Gordon 12.05.2014 12:48
Flash_Gordon

Tak tady je ten program:

http://pc.poradna.net/file/view/18302-createsingle document-exe

Musíš ho ale spustit jako správce, protože výsledný dokument bude chtít zapsat do: C:\document.csv

                folderBrowserDialog1.Description = "Open a folder which contains files";
                folderBrowserDialog1.ShowNewFolderButton = false;
                folderBrowserDialog1.RootFolder = Environment.SpecialFolder.MyComputer;
                if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
                {
                    string folder = folderBrowserDialog1.SelectedPath;
                    DirectoryInfo d = new DirectoryInfo(folder);

                    using (System.IO.StreamWriter fileResult = new System.IO.StreamWriter(@"C:\document.csv"))
                    {

                        foreach (var file in d.GetFiles("*.*"))
                        {
                            string line = "";
                            System.IO.StreamReader file2 = new System.IO.StreamReader(file.FullName);
                            while (( line = file2.ReadLine()) != null)
                            {
                                line = line.Replace("(","");
                                line = line.Replace(")","");
                                List<string> items = line.Split(' ').ToList();
                                if (items.Count > 2)
                                fileResult.WriteLine(items[0] + ";" + items[1] + ";" + items[2]);
                            }

                        }

                    }

                }
            

Ok, zvolím adresář, kde najdu txt soubor a spustím vytvořený soubor document.csv. Historie se přesunula do souboru, ale nevím, jak to teď setřídím. Je to tam takové poházené, nevyznám se v tom.

:-(

Jestliže jsi uvedl pravdivé údaje, měl bys mít v dokumentu něco takového:

[http://pc.poradna.net/file/view/18309-1-jpg]

následně vybereš:

[http://pc.poradna.net/file/view/18310-2-jpg]

A nastavíš tato pravidla seřazení:

[http://pc.poradna.net/file/view/18311-3-jpg]

Nyní bys měl mít dokumet s přehlednou konverzací, seřazen podle jmen.

Ta hláška o tom, že proces nemůže přistupovat... je protože jsi měl ten dokument otevřený v Excelu.
Když ten program spouštíš nesmíš mít otevřený žádný soubor v Excelu !

Předpokladem je též, že adresář, který nalistuješ obsahuje jen soubory s historií.
Tj . nejsou tam žádné jiné nebo dokonce binární soubory.

Ajajaj. Ale kde je samotná konverzace ?!
Na tu jsem totiž zapomněl !

Takže verze prográmku 2, která nezapomněla na konverzaci ! :-[

Stahni si teda verzi 2 a postup výše zůstává stejný, jen přibyde sloupec D s obsahem konverzace :-[:-D

    folderBrowserDialog1.Description = "Open a folder which contains files";
                folderBrowserDialog1.ShowNewFolderButton = false;
                folderBrowserDialog1.RootFolder = Environment.SpecialFolder.MyComputer;
                if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
                {
                    string folder = folderBrowserDialog1.SelectedPath;
                    DirectoryInfo d = new DirectoryInfo(folder);

                    using (System.IO.StreamWriter fileResult = new System.IO.StreamWriter(@"C:\document.csv", false, Encoding.GetEncoding(1250)))
                    {
                        
                        foreach (var file in d.GetFiles("*.*"))
                        {
                            string line = "";
                            System.IO.StreamReader file2 = new System.IO.StreamReader(file.FullName, Encoding.GetEncoding("Windows-1250"));
                            while (( line = file2.ReadLine()) != null)
                            {
                                if (line.Contains("\""))
                                {
                                    fileResult.Write(";"+line);
                                    continue;
                                }
                                line = line.Replace("(","");
                                line = line.Replace(")","");
                                List<string> items = line.Split(' ').ToList();
                                if (items.Count > 2)
                                    fileResult.Write(Environment.NewLine + items[0] + ";" + items[1] + ";" + items[2]);
                            }

                        }

                    }
                    MessageBox.Show("HOTOVO");

                }
            

Protože se jedná o konverzaci v ICQ tak komunikuješ vždy s někým.
Takže seřazení by mělo vypadat TEDA následovně:

[http://pc.poradna.net/file/view/18313-4-jpg]

... to bude drahé.....

Takto. Ve hře je příliš mnoho proměnných. :-D

To s %USERPROFILE%\Desktop nefunguje.

Přesněji nefunguje:

  using (System.IO.StreamWriter fileResult = new System.IO.StreamWriter("%USERPROFILE%\\Desktop\\Document.csv", false, Encoding.GetEncoding(1250)))
 ...

C# Má na toto jinou vychytávku:

Environment.GetFolderPath(Environment.SpecialFolder.Desktop)

Takže tebou zamýšlená upravená část pro zápis souboru by vypadala legitimně takhle:

 using (System.IO.StreamWriter fileResult = new System.IO.StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), false, Encoding.GetEncoding(1250)))
                   

Ovšem tento způsob řešení by se opět nevyhl nutnosti spouštět prográmek jako administrátor. Proč?
Protože disk C (respektive disk se systémem Windows) je privilegovaný v tom, že programy již nesmějí zapisovat jinam, než z kama jsou spouštěny.
Toto by šlo opět obejít tím, že by se spustil prográmek z plochy (a zapisoval by tedy do stejného umístění, kde se nachází).
A kdo to zaručí?

Ovšem z časového a praktického důvodu jsem se rozhodl pro disk c:\Document.csv disk C je totiž v systémech Windows přítomen vždy, což o ostatních není pravidlem.

Nejserióznější varianta by byla zobrazit saveFileDialog, kde by si uživatel sám nalistoval cílové umístění, ale to už se mi tam nechtělo přidělávat.

Protože disk C (respektive disk se systémem Windows) je privilegovaný v tom, že programy již nesmějí zapisovat jinam, než z kama jsou spouštěny.

Toto samozrejme nie je pravda... Pod Win7 nemáš ako user právo zapisovať do systémových zložiek (pochopiteľne) a ani do root pevného disku - čiže c:\
Avšak ak si užívateľ vytvorí na disku c: v root ľubovoľnú zložku napr. c:\aaa, potom môže kľudne zapisovať do c:\aaa\*.*.
To len pre upresnenie...

tak tu vychytávku použij, msdn.microsoft.com, z časového hlediska se to nevyplatí- jen nenasereš systém. mám ti vyprávět jak po vypuštění w7 zdrhlo celý google, maxthon, xnview ne (ten si nechal šablony virtualizovat)po osmileté hrozbě dodržování zápisu, tam kam se má? oni zapisovaly do program files svou konfiguraci- zdrhly zákeřně do profilu. vypadalo to jako útěk na horu čarodějnic. se seznamem bych mohl pokračovat do umrtvení.

Omlouvám se, ale myslím, že mi to nepomůže. Možná jsem ten problém špatně vysvětlil. Radši to vysvětlím ještě jednou.

Ukládal jsem si historii konverzace z Qipu (popř. ICQ), jedná se pouze o jeden kontakt, takže jen já (jako A) a ta druhá strana (jako B). Nikdo další.

Takže mám např. celý rok 2012 jako jeden velký txt soubor (od 1.1.2012 do 31.12.2012) s historií konverzace.

Viz screen:
Bez_n_zvukk.png

Co je mým cílem: vytvořím si složku 2012 - v ní budou složky Leden, Únor, Březen,atd.. a tam bude jako jeden den v měsíci jeden txt soubor. Takže chci z toho jednoho velkého txt souboru, kde bude historie mezi A a B za celý rok 2012 získat cca 365 txt souborů. Jeden txt soubor jako jeden den. (365 jich ve skutečnosti nebude, každý den jsme si nepsali).

Chci tedy, aby nějaký program zjistil podle toho data (12:49:08 1/01/2011), který den to byl a roztřídil konverzaci do jednotlivých dnů.

Viz screen:
postimg.org

Nepůjde-li to, smířím se s tím. Děkuji mnohokrát za vaši snahu.

Tak reaguji taky schválně až po několika dnech.
Někteří tady jenom píší, ale nic nedělají.
Kdybych byl jízlivý, tak napíši vyrypují, i když pravdu mají.

Anonymnímu tazateli nestojím ani za to, aby reagoval na mě.

Lepší je hledat ve vytvořeném documentu, než ve filesystému podle názvu, ale budiž:

Předhoď prográmku celý velký, vytvořený a seřazený dokument.csv, který ti vytvořil předchozí prográmek.

Měl by vytvořit pro každý den Excelový csv dokument s konverzací.

 private void button1_Click(object sender, EventArgs e)
        {
            CreateIfMissing(@"C:\Konverzace");
           
            
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string file = openFileDialog1.FileName;
                string line = "";

                System.IO.StreamReader file2 = new System.IO.StreamReader(file, Encoding.GetEncoding("Windows-1250"));
                while ((line = file2.ReadLine()) != null)
                {
                    List<string> items = line.Split(';').ToList();
                    using (System.IO.StreamWriter fileResult = new System.IO.StreamWriter("c:\\Konverzace\\" + items[2] + ".csv", true, Encoding.GetEncoding(1250)))
                    {
                        fileResult.WriteLine( items[0] + ";" + items[1] + ";" + items[2] + ";" + Environment.NewLine + items[3]);
                    }
                   
                }
                MessageBox.Show(@"HOTOVO, dokumenty se nachází v c:\Konverzace");
            }
        }

        private void CreateIfMissing(string path)
        {
            bool folderExists = Directory.Exists((path));
            if (!folderExists)
                Directory.CreateDirectory((path));
        }

v pořádku, nezlob se uštěpačnosti. asi bych tě neměl nasírat výpisem ze sua (podařilo se ti trefit i jeden mandatory labels)
CreateDirectoryW: Directory (\Device\HarddiskVolume2\Users) only grants requested 'FILE_ADD_SUBDIRECTORY' to 'NT AUTHORITY\SYSTEM, BUILTIN\Administrators'

[18333-sua-jpg]

prostě nepiš tam kam nemáš, piš proměnné systému, user ocení zápis na plochu. snad nebudeš trucovat dlouho.:-)

Ano, nebyl jsem tu několik dnů, omlouvám se všem, koho to urazilo.

Předhodil jsem novému prográmku celý velký soubor, který jsem získal ze staršího prográmku (nazveme ho č.1), ale úspěch žádný.

Prográmek č.1 mi vytvořil jakýsi chaos, viz screen. s20.postimg.org
a prográmek č.2 si s tím neporadí a výsledek vypadá nezměněný.

Asi bych to vzdal, ať se tu ještě zbytečně nehádáte.

Zpět do poradny Odpovědět na původní otázku Nahoru