• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

VBA - skrypt szukający frazy w tekście

Cloud VPS
0 głosów
1,467 wizyt
pytanie zadane 2 listopada 2018 w Visual Basic przez kubekzone Użytkownik (620 p.)
Witam,

Potrzebuję napisać w VBA skrypt, który otworzy zewnętrzny plik jako tekst, w tym tekście znajdzie frazę zawartą między <release>  a  /<release> i następnie zwróci tą frazę do zdefiniowanej zmiennej. Nie za bardzo wiem jak się za to zabrać.

1 odpowiedź

+1 głos
odpowiedź 2 listopada 2018 przez jeremus Maniak (59,720 p.)
Dim strFilename As String: strFilename = "C:\temp\yourfile.txt"
Dim strFileContent As String
Dim iFile As Integer: iFile = FreeFile
Open strFilename For Input As #iFile
strFileContent = Input(LOF(iFile), iFile)

Dim  od,do as Integer
od=inStr(strFileContent,"<release>")+9
do=inStr(strFileContent ,"</release>")

vstr=Mid(strFileContent,od,do)

Close #iFile

 

'to tak mniej więcej  - kodu nie  sprawdzałem,

a co do obsługi pliku  to :

instr - szuka ciągu w stringu

mid to odpowiednik substring

http://codevba.com/office/read_text_file_into_string_variable.htm#.W9yHrntKi70

 

komentarz 6 listopada 2018 przez kubekzone Użytkownik (620 p.)
edycja 6 listopada 2018 przez kubekzone

@jeremus, Dzięki wielkie za odpowiedź! Kod po lekkiej modyfikacji działa świetnie ale wyłącznie z plikami o rozszerzeniu .txt.  z plikami o dowolnym rozszerzeniu.

Dim strFilename As String: strFilename = "C:\temp\yourfile.txt"
Dim strFileContent As String
Dim iFile As Integer: iFile = FreeFile
Open strFilename For Input As #iFile
strFileContent = Input(LOF(iFile), iFile)
 
Dim  od,do1 as Integer
od=inStr(strFileContent,"<Release>") + 9
do1=inStr(strFileContent ,"/<Release>") - 80
 
vstr=Mid(strFileContent,od,do1)
 
Close #iFile

MsgBox vstr

Nie można było ustawić "do" jako zmienną oraz pobierany tekst z pliku wychodził poza ramy wyszukiwania (dokładnie o 80 znaków) - swoją drogą ciekawi mnie czemu?

Wracając do sedna sprawy, dało by się coś zrobić żeby skrypt otwierał dowolny plik jako plik tekstowy z rozszerzeniem .txt ?

Mam kilkanaście plików o różnych rozszerzeniach, które po otwarciu w notatniku (Otwórz za pomocą -> Notatnik) zawierają interesujące mnie informacje. Do tej pory używałem metody "ręcznej" i chciałem to jakoś zautomatyzować właśnie przy pomocy VBA.

//edit: Skrypt działa jednak na wszystkich plikach tak jak chciałem ale jest problem z wyszukiwaniem (opisany poniżej)

komentarz 6 listopada 2018 przez kubekzone Użytkownik (620 p.)

@jeremus, Teraz zauważyłem, że jednak powyższy skrypt nie działa do końca. W plikach, które otwieram znajdują się znaki pokroju . I właśnie na nich skrypt się wysypuje: albo cały program się wyłącza albo wywala błąd "Run-time error '62': Input past end of file.

//edit: doszedłem do tego, że skrypt wysypuje się na linijce 5:

strFileContent = Input(LOF(iFile), iFile)

Da się coś z tym zrobić? ;d

komentarz 6 listopada 2018 przez jeremus Maniak (59,720 p.)

te pliki to nie są pliki tekstowe ?

w tekstowych dział, tylko w Mid  okazuje się że trzeci parametr to ile znaków a nie do którego znaku

czyli taki kod :

od = InStr(strFileContent, "<release>") + 9
'MsgBox (od)
do1 = InStr(strFileContent, "/<release>")
'MsgBox (do1)
vstr = Mid(strFileContent, od, do1 - od)

 

komentarz 7 listopada 2018 przez kubekzone Użytkownik (620 p.)

pliki nie są tekstowe ale po otwarciu w notatniku zawierają informacje tekstowe .

Kod w plikach tekstowych też nie działa jeżeli w tekście znajdują się krzaki typu 

Da sie to jakoś obejść?

komentarz 7 listopada 2018 przez kubekzone Użytkownik (620 p.)
edycja 7 listopada 2018 przez kubekzone

@jeremus, nie wszystkie "dzikie" znaki powodują problem. Znalazłem co najmniej jednego winowajce, na którym zawsze skrypt się sypie. Jest nim strzałka "→". Jeżeli znajduje się gdziekolwiek w tekście to skrypt sie wywala. Jak już zauważyłem wcześniej:

skrypt wysypuje się na linijce  strFileContent = Input(LOF(iFile), iFile)

Co z tym zrobić? Nie jestem w stanie pozbyć się niechcianych znaków. Może dało by się zmienić tablicę znaków z jakich korzysta VBA?

Podobne pytania

0 głosów
1 odpowiedź 1,641 wizyt
0 głosów
1 odpowiedź 1,144 wizyt
0 głosów
1 odpowiedź 562 wizyt
pytanie zadane 27 września 2022 w Visual Basic przez magda_19 Gaduła (3,080 p.)

93,467 zapytań

142,460 odpowiedzi

322,734 komentarzy

62,847 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...