Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 08. 02. 2019 08:21

kubavo
Zelenáč
Příspěvky: 15
Škola: CVUT
Pozice: student
Reputace:   
 

načítání dat do matlabu

Dobrý den,

mám problém se spravným uspořádáním dat po načtení do matlabu. Z měření mám výstup ve formátu textu. V jednom řádku je za sebou asi milion čísel stylem 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,... a já bych potřeboval je rozdělit tak aby po každé čtrté čárce skořil nový řádek, tj:
1,2,3,4
5,6,7,8
9,10,11,12
.
.
.

Neví prosím někdo jak to udělat ? podařilo se mi to v excelu ale ten zas nedokáže načíst milion čísel a končí někde u 16000 čísel :/

díky za rady

Offline

 

#2 08. 02. 2019 09:30

Stýv
Vrchní cenzor
Příspěvky: 5690
Reputace:   215 
Web
 

Re: načítání dat do matlabu

Já bych to udělal v Notepad++ pomocí regulárních výrazů.

Offline

 

#3 08. 02. 2019 09:32

kubavo
Zelenáč
Příspěvky: 15
Škola: CVUT
Pozice: student
Reputace:   
 

Re: načítání dat do matlabu

Ahoj, díky za odpověď, já s tímto porgramem nemám žádné zkušenosti, myslíš že bych tě mohl poprosit o to rozdělení, kdybych ti poslal textak ?

Offline

 

#4 08. 02. 2019 14:51

MichalAld
Moderátor
Příspěvky: 4865
Reputace:   125 
 

Re: načítání dat do matlabu

Není nad to se naučit nějaký obecný programovací jazyk (basic, pascal, c-éčko, java atd, jsou jich desítky...)

Pak je to, co potřebuješ udělat prográmek na pár (desítek) řádků.

Offline

 

#5 08. 02. 2019 17:48

Stýv
Vrchní cenzor
Příspěvky: 5690
Reputace:   215 
Web
 

Re: načítání dat do matlabu

↑ kubavo: To by nebylo moudré. Za týden zjistíš, že byl ten vstup špatně a budeš shánět někoho, kdo ti to udělá znova. A za měsíc budeš potřebovat něco podobnýho s jinýma datama a zas budeš někho shánět... Radši ti vysvětlím, jak na to, je to triviální:

1. stáhni si notepad++
2. Dej nahradit (ctrl+h) výraz "([0-9]+, [0-9]+, [0-9]+, [0-9]+), " za "\1\r\n" (bez těch uvozovek). Při nahrazování je třeba vlevo dole vybrat mód "regulární výraz" (viz obrázek)

Jak to funguje?
[0-9] označuje jeden znak 0-9, znak + znamená, že se může opakovat (alespoň jednou)
, a mezera jsou prostě čárka a mezera. (Pokud tam ty mezery nemáš, tak je nepiš ani do toho regulárního výrazu.)
závorky označujou podvýraz, na kterej se pak dá odkázat pomocí \1 (kdyby tam bylo podvýrazů víc, tak se označujou \1, \2, \3 atd.)
\r\n je konec řádku na windows

//forum.matweb.cz/upload3/img/2019-02/44486_Clipboard01.png

Offline

 

#6 08. 02. 2019 17:49

Stýv
Vrchní cenzor
Příspěvky: 5690
Reputace:   215 
Web
 

Re: načítání dat do matlabu

↑ MichalAld: Souhlasím, že je užitečné umět programovat. Ale psát si na jednoduchý find&replace vlastní program by bylo poněkud kanónovrabcovité.

Offline

 

#7 08. 02. 2019 18:40

edison
Příspěvky: 2622
Reputace:   47 
 

Re: načítání dat do matlabu

Tak třeba pro mě je naprogramovat míň práce než se naučit regulární výrazy:-)

Offline

 

#8 08. 02. 2019 19:00 — Editoval MichalAld (08. 02. 2019 19:05)

MichalAld
Moderátor
Příspěvky: 4865
Reputace:   125 
 

Re: načítání dat do matlabu

↑ edison:
Jo jo, není to úplně pro "normální lidi", ale když to člověk jednou aspoň trochu pochopí, tak je to často k nezaplacení.

Ale z nějakého důvodu se s tím technici na školách nesetkávají (jako se spoustu dalších celkem užitečných věcí z programátorského světa).

Není to mmch. nějak speciálně složité, stačí se naučit cca 10 symbolů a už napíšeš regulární výraz pro kdeco. Já je sám ani z hlavy neznám, mám je jen napsané (někde) nebo si je vždy znovu najdu, když to potřebuji.

Offline

 

#9 08. 02. 2019 20:41

Stýv
Vrchní cenzor
Příspěvky: 5690
Reputace:   215 
Web
 

Re: načítání dat do matlabu

↑ edison: To je trochu nefér srovnání, regulární výrazy se naučíš jednou a pak je můžeš používat celej život místo toho, abys furt dokola programoval skoro to samý. Navíc jsou fakt jednoduchý, takže se počáteční investice  vrátí tak po 1-3 použitích.;-)

Offline

 

#10 11. 02. 2019 08:46

kubavo
Zelenáč
Příspěvky: 15
Škola: CVUT
Pozice: student
Reputace:   
 

Re: načítání dat do matlabu

Díky všem, nakonec jsem dal dohromady program v c, ale zkusím i ten notepad

Offline

 

#11 11. 02. 2019 23:15 — Editoval kubavo (11. 02. 2019 23:15)

kubavo
Zelenáč
Příspěvky: 15
Škola: CVUT
Pozice: student
Reputace:   
 

Re: načítání dat do matlabu

mám problém, zapoměl jsem dodat že ta čísla nejsou jen čísla ale je tam i E

1.3062E-01, 5.0476E+00, 1.7212E-01,...

tak nevím jak tohle notepadem udělám

Offline

 

#12 11. 02. 2019 23:25 — Editoval Stýv (11. 02. 2019 23:27)

Stýv
Vrchní cenzor
Příspěvky: 5690
Reputace:   215 
Web
 

Re: načítání dat do matlabu

"([0-9]*\.[0-9]*E[+|-][0-9]*, [0-9]*\.[0-9]*E[+|-][0-9]*, [0-9]*\.[0-9]*E[+|-][0-9]*, [0-9]*\.[0-9]*E[+|-][0-9]*), "

[0-9]* - libovolný počet číslic (může jich být i 0)
\. - tečka, jelikož má speciální význam, musí se escapovat
[+|-] - buď plus, nebo mínus

Offline

 

#13 11. 02. 2019 23:32

Stýv
Vrchní cenzor
Příspěvky: 5690
Reputace:   215 
Web
 

Re: načítání dat do matlabu

Nebo jednodušeji: "([^ ]+ [^ ]+ [^ ]+ [^ ]+), "

[^ ]+ je libovolný znak kromě mezery, alespoň jednou

Offline

 

#14 12. 02. 2019 01:10

MichalAld
Moderátor
Příspěvky: 4865
Reputace:   125 
 

Re: načítání dat do matlabu

↑ Stýv:
No, chtěl jsem to říct už na začátku, že problém by se lehce zkomplikoval, když by tam byla obecná "floatová" čísla - a že by bylo lepší to hledat jako "4x cokoliv (mimo čárku), oddělené čárkou", jen nevím, jak by se to přesně psalo.

Napsat regulární výraz, co spolehlivě pozná libovolné "floatové" číslo je už docela složité, lepší to někde zkopírovat.

Aby se nakonec to céčko neukázalo jako jednodušší varianta.....hi

Offline

 

#15 12. 02. 2019 10:05 — Editoval edison (12. 02. 2019 10:14)

edison
Příspěvky: 2622
Reputace:   47 
 

Re: načítání dat do matlabu

Tohle bych asi dělal ve Visual basicu.

Prostě bych opakoval, dokud není eof(1)
input #1, a, b, c, d
print #2, a;", " b;", "  c;", " d

přičemž #1 jsem otevřel pro čtení a #2 pro zápis, a-d jsou proměnné typu variant, takže jsem je ani nemusel deklarovat.

mmch. ten VB má i operátor Like a ten zas používá něco jako regulární výrazy

Edit: v původní variantě by to generovalo čtveřice oddělené tabulátorama

Offline

 

#16 12. 02. 2019 20:05

kubavo
Zelenáč
Příspěvky: 15
Škola: CVUT
Pozice: student
Reputace:   
 

Re: načítání dat do matlabu

http://prntscr.com/mk7og1

pořád nefunguje :(

Offline

 

#17 12. 02. 2019 21:14

Stýv
Vrchní cenzor
Příspěvky: 5690
Reputace:   215 
Web
 

Re: načítání dat do matlabu

↑ kubavo: Nemáš kurzor na konci? Btw. mezi některými čísly nejsou mezery, to bude dělat neplechu.

Offline

 

#18 12. 02. 2019 21:30

edison
Příspěvky: 2622
Reputace:   47 
 

Re: načítání dat do matlabu

Mě přijde, že řešení s programem je míň práce.

Pokud ne VB viz ↑ edison:, tak třeba jen číst a posílat do druhého souboru a po každé čtvrté čárce přidat enter.

Jinak ty data vypadají, jako by je produkovala funkce str z VB. Ta má na začátku výstupu buď mezeru, nebo mínus.

Offline

 

#19 12. 02. 2019 21:36

Stýv
Vrchní cenzor
Příspěvky: 5690
Reputace:   215 
Web
 

Re: načítání dat do matlabu

↑ edison: Jako že je rychlejší napsat +-10 řádků kódu než 1 regulární výraz? Jednoduchý výpočet mi říká, že je to naopak +-10krát pomalejší.;-)

Offline

 

#20 12. 02. 2019 21:45

edison
Příspěvky: 2622
Reputace:   47 
 

Re: načítání dat do matlabu

Teď jde ještě o to, vymyslet ten správnej RV. A to zdá se trvá dlouho:-)

Zrovna tento typ úlohy je prostě snadněji řešitelný tím programem. Tomu stačí data triviálně procházet a sekat podle čárek. Co je mezi nimi, mu může být ukradené. RV je na tom zjevně naopak, musí se napsat maska, která sežere všechny možné kombinace toho, co se vyskytuje mezi čárkami.

Offline

 

#21 12. 02. 2019 21:49

edison
Příspěvky: 2622
Reputace:   47 
 

Re: načítání dat do matlabu

Open #1, "data.txt"
Open #2, "data-cnv.txt"
do while not eof(1)
    input #1, a, b, c, d
    print #2, a;", " b;", "  c;", " d;", "
loop
close(1)
close(2)

8 řádků, z toho poslední dva nejsou nutné:-)

Offline

 

#22 12. 02. 2019 22:08

kubavo
Zelenáč
Příspěvky: 15
Škola: CVUT
Pozice: student
Reputace:   
 

Re: načítání dat do matlabu

nemam VB, leda by to šlo nějak online ?

Offline

 

#23 12. 02. 2019 22:19 — Editoval MichalAld (12. 02. 2019 22:22)

MichalAld
Moderátor
Příspěvky: 4865
Reputace:   125 
 

Re: načítání dat do matlabu

To jsou takové filozofické debaty. Vždycky je lepší to co člověk umí (a má zrovna k dispozici).

Mě to nedalo a zkusil jsem si napsat (co nejjednodušší) program v céčku - a nejvíc času mi dalo spuštění microsoft visual studia a založení projektu....

Nejjednodušší program co jsem dokázal vymyslet vypadá takto:

Code:

#include "stdio.h"

void main(void)
{
    int c;
    int i = 0;
        
    while((c = getchar()) != EOF)
    {
        if(c == ',')
            i++;

        putchar(c);

        if(i == 4)
        {
            i = 0;
            putchar('\n');
        }
    }
}

Otestovat to lze přímo na příkazové řádce, když se spustí samotný program, a pak se napíše nějaký vzorek textu a Enter.

Ke konverzi souborů využijeme přesměrování (to jsou ty šipky < a >), takže například takto (když by se program jmenoval Convertor.exe)

Convertor.exe   <InputFile   >OutputFile

Funguje to bez problémů. A bylo to rychlejší než napsat tenhle příspěvek. Problém je jen, že člověk musí mít k dispozici nějaký ten překladač. V tom má výhodu lLinux, tam je céčko tak nějak vždycky.

Offline

 

#24 12. 02. 2019 22:21

edison
Příspěvky: 2622
Reputace:   47 
 

Re: načítání dat do matlabu

Zda online nevím, ale Visual studio je pro nekomerční užití zdarma. Ovšem je to docela monstrum:-)

Jestli máš něco s C, tak v tom to určitě půjde napsat taky (jen tam nemám zkušenosti se souborovými operacemi). Ale není tam takový chytrý příkaz na načítání proměnných. Místo toho budeš načítat jednotlivé znaky, posílat do druhého souboru, počítat čárky a za každou čtvrtou přidáš \r\n.

Tímto způsobem to půjde napsat v podstatě v čemkoli, třeba i v Pythonu, nebo Bashi na Linuxu a možná i bat/cmd na Win, ale to už bude na vymyšlení složitý jak ten RV:-)

Offline

 

#25 12. 02. 2019 22:23

edison
Příspěvky: 2622
Reputace:   47 
 

Re: načítání dat do matlabu

↑ MichalAld:Nějak tak jsem si to představoval:-)

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson