Video: UiPath Tutorials - XML Parsing 2024
Har du noen gang fått et Excel-regneark med navn, hvor de fulde navnene er alle i ett celle? Din oppgave er å bryte navnene til fornavn, etternavn - en prosess kjent som parsing. Du kan prøve å bruke en formel og / eller funksjon for å hjelpe, eller du kan bruke VBA-kode (Visual Basic for Applications).
En felles tilnærming er å finne mellomrom mellom fornavn og etternavn, og voila! - Du vet hvor fornavnet slutter og etternavnet starter.
Med mindre du har navn som er mer komplekse i struktur, for eksempel Dr. William Healer eller Zak H. Sneezer III.
Her er en typisk VBA-rutine som ser gjennom hvert navn, karakter for tegn, til det finner plass. Deretter plasserer det det som er til venstre for plassen i en kolonne og hva som er til høyre for plassen i kolonnen etter.
Gjør til ActiveCell = "thename = ActiveCell. Value For å se = 1 Til Len (thename) Hvis Mid (thename, looking, 1) =" "Så ActiveCell. Offset (0, 1) = Venstre 1) ActiveCell. Offset (0, 2) = Mid (thename, ser + 1) Avslutt for slutt Hvis neste ActiveCell. Offset (1, 0). Aktiver Loop
Denne rutinen er nyttig for å analysere navn med bare ett mellomrom, som Harvey Wallbanger eller Tom Collins. Følgende tabell viser resultatet av å kjøre koden på navn med mer enn ett mellomrom:
Dr. William Healer | Dr. < William Healer | Zak H. Sneezer III |
Zak | H. Sneezer III | Dette er ikke et godt parsingforsøk. Det fungerte fint for å analysere Harvey Wallbanger og Tom Collins, men ikke så bra for de andre navnene. |
Her er en mer utviklet teknikk som gir bedre resultater. Husk at parsing av navn ikke er perfekt, men å gjøre det på den måten gjør en bedre jobb.
Denne prosessen kjøres i en VBA-subrutine som kaller en funksjon mens du løper gjennom navnene. Antall mellomrom bestemmes tidlig i hovedløkken, og funksjonen returnerer posisjonen hvor bryteplassen er.
Sub parse_names () Dim thename Som String Dim Space Som Integer Gjør til ActiveCell = "thename = ActiveCell. Verdi mellomrom = 0 For test = 1 Til Len (thename) Hvis Mid (thename, test, 1) =" "Så mellomrom = mellomrom + 1 End Hvis neste Hvis mellomrom> = 3 Så break_space_position = space_position ("", thename, mellomrom - 1) Else break_space_position = space_position ("", thename, mellomrom) Slutt Hvis Hvis mellomrom> 0 Så ActiveCell.Offset (0, 1) = Venstre (thename, break_space_position - 1) ActiveCell. Offset (0, 2) = Mid (thename, break_space_position + 1) Ellers 'dette er for når hele navnet er bare et enkelt navn uten mellomrom ActiveCell. Offset (0, 1) = thename End hvis ActiveCell. Offset (1, 0). Aktiver Loop End Sub Funksjon space_position (what_to_look_for As String, what_to_look_in As String, what_to_look_in As String, space_count As Integer) Som integer Dim loop_counter Som integer space_position = 0 For loop_counter = 1 Til space_count space_position = InStr (loop_counter + space_position, what_to_look_in, what_to_look_for) Hvis space_position = 0 Deretter avslutter du for neste sluttfunksjon
Følgende tabell viser hvordan resultatet ser ut som nå:
Dr. William Healer
Dr. William | Healer | Zak H. Sneezer III |
Zak H. | Sneezer III | Navn parsing er like mye kunst som teknisk prosess. I dette andre eksempelet er alle for- og etternavn i de riktige kolonnene. Hvis et nytt langt navn med fem eller flere mellomrom ble introdusert, kan rutinen få parsing feil, og VBA-koden ville trenge mer betinget testing satt inn i den. Men dette eksemplet er nå på rette spor som en industriell styrke navn-parsing rutine. |