Poraďte mi, prosím, jak zpracovat víceřádkové reguláry Vyřešeno

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
Myloš
Master Level 8.5
Master Level 8.5
Příspěvky: 6990
Registrován: duben 06
Bydliště: Praha
Pohlaví: Muž
Stav:
Offline

Poraďte mi, prosím, jak zpracovat víceřádkové reguláry

Příspěvekod Myloš » 26 led 2015 21:30

Marně hledám způsob, jak zpracovat text pomocí regulárů v rozsahu více řádků.
Nejsem dobrý programátor (jsem programátor-bastlíř-diletant-samouk), proto používám PSPad, který reguláry zvládá dobře, ovšem výhradně v rámci jednoho řádku. Pokud chci z textu odstranit veškerý balast, zůstane mi mraky volných řádků (a to ještě navíc dělám tak, že zkopíruji předmětný řetězec do dialogového okna NAHRADIT a nahradím prázdným řetězcem), přestože by na tohle za normálních okolností měl stačit jeden regulár (ENTER jako \r); takhle je to ovšem strašná otrava a především ztráta času.

Předpokládám, že linuxové editory jako Vi nebo Emacs by to asi zvládly, ale už dlouhou dobu nemám doma Linux; mám Windows 7 a i když byly patrně i pro Windows portovány, co pamatuju, měly tyhle editory na můj vkus dost nepohodlné ovládání pro člověka odkojeného DOSem a Windows, který se nechce učit nic nového – než bych zvládl jejich ovládání, patrně bych měl problém vyřešený dosavadním zdlouhavým způsobem.

Konkrétně mi jde o vytažení všech SMS z mobilu (Samsung GT-C 6112) za účelem archivace, jejich převedení do TXT a pospojování do jednoho souboru.
Vím, že existují programy jako MobilEdit nebo KIES, ale žádný z nich s mým mobilem nepracoval uspokojivě a nadto i když jsem se ke zprávám pomocí MobilEditu nakonec dostal, nechci zdlouhavě přetahovat texty metodou Copy-Paste.

Zprávy jsem ještě v mobilu vyexportoval (všechny najednou pomocí zatržítka, tedy záležitost tak na půl minuty) do souborů *.vmg (syntaxe značkovacího jazyka jako HTML nebo XML) a přes USB je přetáhl do počítače, Total Commanderem jsem je hromadně přejmenoval podle data jako 01.txt až nn.txt a ač jsou mé programátorské dovednosti mizerné, díky všelikým online PHP manuálům jsem je nakonec sloučil a zobrazil v prohlížeči (který samozřejmě \n v rámci HTML nijak neinterpretuje, ale pak stačí zobrazit zdroják a metodou Copy-Paste přenést do jednoho TXT souboru).

Abyste měli představu, jaký jsem „programátor“, můžete se ve spoileru podívat na předmětný script:

a to jsem ještě docela pyšný na to, jak úsporně jsem to celé opsal ;-)
► Zobrazit spoiler

[spoiler=Vylezl mi z toho následující text:]BEGIN:VMSG
VERSION:1.1
X-IRMC-STATUS:READ
X-IRMC-BOX:INBOX
BEGIN:VCARD
VERSION:2.1
N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E4=AC=80=E7=88=80=E6=A4=80=E7=8C=80=E7=90=80=EC=8C=80=EB=B4=80=E6=B8=80=E6=84=
=80;;;;
FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:
TEL:(zde je telefonní číslo, které z pochopitelných důvodů neuvádím ;-))
END:VCARD
BEGIN:VENV
BEGIN:VBODY
Date:24.01.2015 08:33:39
TEXT:Tady je text SMS zprávy, nadto veškerá diakritika je zmrzačená, například písmeno „ě“ je převedeno jako „=C4=9B“
END:VBODY
END:VENV
END:VMSG[/spoil]Potřebuji, aby mi z toho všeho zůstalo jen datum, čas a text zprávy, tedy jen to, co ve spoileru vidíte tučnými písmeny, přičemž a na řádku začínajícím „Date:“ chci nechat jen datum s mezerami za tečkami, ze dnů a měsíců odstranit prefixové nuly (ale ne u hodin), za rokem udělat čárku a z časové značky odstranit sekundy, tedy ve výše uvedené ukázce by mělo na řádku „Date:… zůstat toto: „24. 1. 2015, 08:33“.


Abych nikoho příliš nezatěžoval, stačil by mi tip na nějaký vhodný textový editor. Pokud by se tu ovšem nalezl dobrodinec, který by pro mě napsal vhodný PHP script (šlo by o zpracování jednoho sloučeného TXT souboru), byl bych mu nevýslovně povděčen.
A to je vše.
  • Než položíte dotaz, nejprve se ptejte strejdy Gůůgla.
  • Výňatek z pravidel fóra PC-HELP:
    • Název tématu zvolte takový, aby co nejvýstižněji charakterizoval obsah tématu.
    • Nesnažte se řešit jiný problém (i když podobný) v jednom tématu. Raději založte nové téma.
  • Mýliti se je Myloš. ;-)

Reklama
Uživatelský avatar
lamin_cz
Level 2.5
Level 2.5
Příspěvky: 314
Registrován: říjen 12
Bydliště: Kostelec u Holešova
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Poraďte mi, prosím, jak zpracovat víceřádkové reguláry

Příspěvekod lamin_cz » 27 led 2015 10:10

Kód: Vybrat vše

<?php
$file 
= file('01.txt');
$matches  = preg_grep ('/^(Date:|TEXT:)(\w+)/i', $file);
$matches = preg_replace('/^(Date:|TEXT:)/i', '', $matches );
$matches array_values($matches); // reindex pole

date_default_timezone_set('Europe/Prague');
$date = date_parse_from_format('d.m.Y H:i:s', $matches[0]); // 24.01.2015 08:33:39
$timestamp = mktime($date['hour'], $date['minute'], $date['second'], $date['month'], $date['day'], $date['year']);
?>

$timestamp si pak můžeš formátovat dle libosti.
  • CPU: Cx6x86L-PR150+
  • MB: XT PRO2
  • GPU: integrovaná
  • RAM: 28Mb SDRAM
PHP, MySQL, HTML, CSS, jQuery ...

Uživatelský avatar
Myloš
Master Level 8.5
Master Level 8.5
Příspěvky: 6990
Registrován: duben 06
Bydliště: Praha
Pohlaví: Muž
Stav:
Offline

Re: Poraďte mi, prosím, jak zpracovat víceřádkové reguláry

Příspěvekod Myloš » 27 led 2015 12:14

Dík moc, večer na to kouknu.
  • Než položíte dotaz, nejprve se ptejte strejdy Gůůgla.
  • Výňatek z pravidel fóra PC-HELP:
    • Název tématu zvolte takový, aby co nejvýstižněji charakterizoval obsah tématu.
    • Nesnažte se řešit jiný problém (i když podobný) v jednom tématu. Raději založte nové téma.
  • Mýliti se je Myloš. ;-)

Uživatelský avatar
Myloš
Master Level 8.5
Master Level 8.5
Příspěvky: 6990
Registrován: duben 06
Bydliště: Praha
Pohlaví: Muž
Stav:
Offline

Re: Poraďte mi, prosím, jak zpracovat víceřádkové reguláry

Příspěvekod Myloš » 27 led 2015 16:13

Ještě než jsem šel do práce, tak jsem to narychlo ozkoušel, ale neudělalo to nic. Když teď na to koukám (mám chvilku), tak ten script pouze projde soubor a z řádku začínajícím „Date:“ to rozseká do proměnných, jenže to je to nejmenší z toho všeho. Formát data si už můžu upravit hromadně v PSPadu.
O co mi jde – aby ten script vyhodil ze souboru všechno, co tam nechci, neboli aby smazal úplně všechno krom toho, co jsem vyznačil v ukázce (druhý spoiler) tučně. A aby smazal nejen text na řádcích, ale i prázdné řádky (^$\r).
Algoritmicky je mi to snad jasné – projde to soubor od začátku do konce a do proměnné uloží jen to, co bude odpovídat zadání. To bych ještě v zásadě zvládl, POKUD by text zprávy byl jen na jednom řádku. Zpráva samozřejmě začíná řetězcem „TEXT:“, jenže pokud je na více řádcích, tak ty ostatní řádky mohou začínat vysloveně čímkoli.
  • Než položíte dotaz, nejprve se ptejte strejdy Gůůgla.
  • Výňatek z pravidel fóra PC-HELP:
    • Název tématu zvolte takový, aby co nejvýstižněji charakterizoval obsah tématu.
    • Nesnažte se řešit jiný problém (i když podobný) v jednom tématu. Raději založte nové téma.
  • Mýliti se je Myloš. ;-)

Uživatelský avatar
ITCrowd
Tvůrce článků
Guru Level 13.5
Guru Level 13.5
Příspěvky: 23591
Registrován: březen 10
Pohlaví: Muž
Stav:
Offline

Re: Poraďte mi, prosím, jak zpracovat víceřádkové reguláry

Příspěvekod ITCrowd » 27 led 2015 16:47

Co vbs? Ten by to mohl řešit...
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router

Uživatelský avatar
Myloš
Master Level 8.5
Master Level 8.5
Příspěvky: 6990
Registrován: duben 06
Bydliště: Praha
Pohlaví: Muž
Stav:
Offline

Re: Poraďte mi, prosím, jak zpracovat víceřádkové reguláry

Příspěvekod Myloš » 27 led 2015 16:57

To by mohl, ale zatímco o PHP ještě jakžtakž něco vím, s VBS jsem v životě nepracoval a jeho syntaxe je mi naprosto nesrozumitelná.
  • Než položíte dotaz, nejprve se ptejte strejdy Gůůgla.
  • Výňatek z pravidel fóra PC-HELP:
    • Název tématu zvolte takový, aby co nejvýstižněji charakterizoval obsah tématu.
    • Nesnažte se řešit jiný problém (i když podobný) v jednom tématu. Raději založte nové téma.
  • Mýliti se je Myloš. ;-)

Uživatelský avatar
ITCrowd
Tvůrce článků
Guru Level 13.5
Guru Level 13.5
Příspěvky: 23591
Registrován: březen 10
Pohlaví: Muž
Stav:
Offline

Re: Poraďte mi, prosím, jak zpracovat víceřádkové reguláry  Vyřešeno

Příspěvekod ITCrowd » 27 led 2015 18:42

Ahoj, tak tady to máš. Musíš to vyzkoušet v praxi, nevím jak moc budou funkční víceřádkové zprávy.
text z code zkopíruj do texťáku a ulož s příponou .vbs
Soubor co potřebuješ prohledat se musí jmenovat sms.txt a musí být ve stejném adresáři jako skript.
Výsledek bude v souboru Resume_.txt taktéž ve stejném adresáři.

Kód: Vybrat vše

'******************************************************
'*         Script kontroluje soubor sms.txt           *
'*     Soubor musí být uložen v adresáři scriptu.     *
'*       Název souboru musí být sms.txt               *
'*       Vytváří zjednodušený soubor Resume_.txt      *
'*           vytvořeno pro PC-HELP                    *
'*            Etienn@Script v. 1.0                    *
'******************************************************

Option Explicit
Dim path, fso, src, cilFile, Text, DatumRadek, Datum
Dim i, znak, SMS, SMS2, txtStream, txtStream2
path = WScript.ScriptFullName
path = Left(path, InStrRev(path, "\"))

Set fso = CreateObject("Scripting.FileSystemObject")
src = path & "sms.txt"

If Not fso.FileExists(src) Then
WScript.Echo "Soubor: " & src & " nenalezen."
Set fso = Nothing
WScript.Quit
End If

cilFile = path & "Resume.txt"

Set txtStream = fso.OpenTextFile(src)
Set txtStream2 = fso.OpenTextFile(cilFile, 8, True)

Do While Not (txtStream.AtEndOfStream)
   Text = txtStream.ReadLine
   Datum = Left (Text,4)
   If Datum = "Date" Then
     DatumRadek = ""
     For i = 6 To 11
       znak = Mid (Text, i, 1)
       If znak <> "0" Then DatumRadek = DatumRadek & znak
       If znak = "." Then DatumRadek = DatumRadek & " "
     Next
     DatumRadek = DatumRadek & Mid (Text, 12, 4) & ", "
     For i = 17 To 21
       znak = Mid (Text, i, 1)
       DatumRadek = DatumRadek & znak
     Next
     txtStream2.WriteLine DatumRadek
   End If 
   SMS = Left (Text, 4)
   If SMS = "TEXT" Then
   txtStream2.WriteLine Mid(Text,6)
   SMS2 = ""
   Do While Not (SMS2 <> "END")
      Text = txtStream.ReadLine
      SMS2 = Left(Text, 3)
      If SMS2 <> "END" Then txtStream2.WriteLine Text
   Loop
   End If
   
Loop   

MsgBox "Hotovo", vbOKOnly + vbInformation, "   SMS"

Set fso = Nothing
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router

Uživatelský avatar
Myloš
Master Level 8.5
Master Level 8.5
Příspěvky: 6990
Registrován: duben 06
Bydliště: Praha
Pohlaví: Muž
Stav:
Offline

Re: Poraďte mi, prosím, jak zpracovat víceřádkové reguláry

Příspěvekod Myloš » 27 led 2015 20:05

Báječný, díky moc, funguje perfektně.
  • Než položíte dotaz, nejprve se ptejte strejdy Gůůgla.
  • Výňatek z pravidel fóra PC-HELP:
    • Název tématu zvolte takový, aby co nejvýstižněji charakterizoval obsah tématu.
    • Nesnažte se řešit jiný problém (i když podobný) v jednom tématu. Raději založte nové téma.
  • Mýliti se je Myloš. ;-)

Uživatelský avatar
ITCrowd
Tvůrce článků
Guru Level 13.5
Guru Level 13.5
Příspěvky: 23591
Registrován: březen 10
Pohlaví: Muž
Stav:
Offline

Re: Poraďte mi, prosím, jak zpracovat víceřádkové reguláry

Příspěvekod ITCrowd » 27 led 2015 20:25

Není zač. Rádo se stalo. :D
Zkusili jste to vypnout a zapnout? Problémy řeším pouze v tématech. Do SZ mi proto píšete zbytečně.
Základní diagnostika WiFi Jak na diagnostiku sítě Router jako switch Proč je nesmysl chtít router s velkým dosahem Vybíráme router


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Poraďte GPU+Zdroj+Casu
    od ttomasek » 20 led 2024 20:00 » v Rady s výběrem hw a sestavením PC
    7
    1153
    od Gerete Zobrazit poslední příspěvek
    23 led 2024 21:27
  • Minecraft kniha - poradte Příloha(y)
    od michal84 » 18 kvě 2023 16:14 » v Vše ostatní (Off topic)
    1
    2001
    od michal84 Zobrazit poslední příspěvek
    07 črc 2023 10:52
  • Chrome načítá stránku hned po zapnutí PC Zdroj: https://www.poradte.cz/pocitace-a-prislusenstvi/54978-chrome-nacita-stra Příloha(y)
    od kellne » 13 bře 2024 09:30 » v Windows 11, 10, 8...
    4
    690
    od kellne Zobrazit poslední příspěvek
    13 bře 2024 21:27
  • Prosím nacenění
    od DarF » 18 kvě 2023 10:18 » v P: Hardware
    7
    1856
    od Baggy Zobrazit poslední příspěvek
    20 kvě 2023 20:31
  • Prodej PC - prosím o nacenění
    od bereline » 18 črc 2023 20:46 » v P: Hardware
    2
    1943
    od bereline Zobrazit poslední příspěvek
    19 črc 2023 11:10

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti