[SOLVED] Wyciągnięcie fragmentu tekstu

Użytkowanie arkusza kalkulacyjnego
roki9
Posty: 6
Rejestracja: pn maja 20, 2019 6:58 pm

[SOLVED] Wyciągnięcie fragmentu tekstu

Post autor: roki9 »

Witajcie,

potrzebuję wyciągnąć fragment tekstu w taki sposób, ze w komórce mam ciąg wartości ale trudność jest taka, że z przodu i z tyłu tego fragmentu jest niestala ilość znaków. Potrzebny do wyciągnięcia fragment zawsze następuje po ciągu znaków "name": i jest zawarty w cudzysłowiu.
Przykładowo - w pierwszym wierszu jest to Cvdot.pdf , w drugim cv.odt itd...

[{ "size":"167.586","name":"Cvdot.pdf","filename":"fu_adfnsz2extue6xs7n","ext":"pdf" }]
[{ "size":"112.705","name":"cv.odt","filename":"fu_aa4z4gi5meeg8ds","ext":"odt" }]
[{ "size":"17.92","name":"cv.doc","filename":"fu_dsdrqzg2fbgsdy4j","ext":"doc" }]
[{ "size":"80.912","name":"Cv%20Karolina%20Pas%202019.pdf","filename":"fu_dfsvyx2t9fmhbjv","ext":"pdf" }]

Będę wdzięczny za jakieś pomysły, wskazówki...
Ostatnio zmieniony wt maja 21, 2019 8:06 pm przez roki9, łącznie zmieniany 1 raz.
LibreOffice 6.2.3.2, Windows 10.0
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Wyciągnięcie fragmentu tekstu

Post autor: Jan_J »

Uwaga pierwsza: dlaczego Calc miałby być optymalnym narzędziem do obróbki struktur typu JSON? Łatwiej byłoby taki plik przeczytać (z analizą składni, czyli `przeparsować`) czymś, co rozumie notację. Szkic wstępny w Pythonie

Kod: Zaznacz cały

import json

def czytaj(fname):
    with open(fname) as f:
        for x in f:
            x = json.loads(x)
            print(x[0]['name'])

if __name__ == '__main__':
    import sys
    if len(sys.argv) > 1:
        czytaj(sys.argv[1])
    else:
        print('podaj nazwę pliku w wywołaniu')
    input('...')
który w dosłownej postaci działa dość topornie (w środowisku wiersza poleceń), ale który łatwo da się rozbudować do makra wczytującego kolumnę z pliku do Calca. Warto, ale tylko wtedy, kiedy pracę tę wykonuje się regularnie na podstawie dostarczonych plików tekstowych / json. Bo dane pewnie pochodzą od skryptu obsługującego formularz wysyłki plików?

Choć prawdę mówiąc, nie jest dla mnie jasny także powód, dla którego listę nazw plików miałbym przechowywać jako kolumnę w Calcu.

Uwaga druga: wyrażenia regularne dadzą radę. Nie pokazuję jak, bo ...

Uwaga trzecia: przy następujących warunkach:
* dwukropki, przecinki i cudzysłowy nie występują w nazwach plików opisanych pod hasłem name,
* w opisach pole name zawsze jest drugie w kolejności,
poradzisz sobie nawet importem danych csv albo wklejeniem specjalnym takich danych (kopiuj / Ctrl+Shift+V jako tekst niesformatowany). Podaj jako separatory znaki :," z opcją scal, wtedy wszystkie nazwy plików dostaniesz w jednej kolumnie, zdaje się czwartej.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
roki9
Posty: 6
Rejestracja: pn maja 20, 2019 6:58 pm

Re: Wyciągnięcie fragmentu tekstu

Post autor: roki9 »

Dzięki za odpowiedź Jan_J. Wiem, że Calc nie jest optymalny do obróbki ale napiszę o co chodzi...

2-3 razy w tygodniu eksportuję plik z systemu ankietowego do Calca, gdzie obrabiam dane. W jednym z pytań ankiety dodawany jest załącznik. Chciałbym w Calcu zrobić sobie linka (przy użyciu m.in. funkcji ZŁĄCZ.TEKST) po kliknięciu w który będzie mi się wyświetlać załącznik (teraz muszę ręcznie wchodzić w ankietę co jest czasochłonne).

Wiem, że można to sobie podzielić wklejając tekst i ustawiając rozdzielanie separatorem (:) ale ponieważ czynność jest wykonywana dosyć często, szukam jakiegoś bardziej 'eleganckiego' sposobu rozwiązania problemu (czytaj - przeciągnięcie formuły), tak bym tą jedną kolumną nie musiał się osobno zajmować.
LibreOffice 6.2.3.2, Windows 10.0
Awatar użytkownika
Jermor
Posty: 2258
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Wyciągnięcie fragmentu tekstu

Post autor: Jermor »

Podsyłam ci więc kawałek arkusza. Formuły są rozbite na trzy komórki aby łatwiej zobaczyć ich logikę, ale można oczywiście utworzyć jedną rozbudowaną.
Załączniki
roki9.ods
(12.25 KiB) Pobrany 216 razy
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
roki9
Posty: 6
Rejestracja: pn maja 20, 2019 6:58 pm

Re: Wyciągnięcie fragmentu tekstu

Post autor: roki9 »

O to chodziło. Dzięki Jermor, jesteś moim bohaterem ;)
LibreOffice 6.2.3.2, Windows 10.0
ODPOWIEDZ