Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1308to1312
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Teile einer Text Datein in Excel

Teile einer Text Datein in Excel
21.04.2013 19:01:34
Ramona
Hi,
vielleicht kann mir jemand zu meiner Frage helfen.
Ich habe einige (4) Textdateien, aus denen ich bestimmte Teile in eine Excel Tabelle auslesen will.
Die Dateien sehen in etwas so aus:
{
"type": "nearby",
"name": "Nearby",
"items": [
{
"id": "512ba29ee4b0386997883496",
"name": "LaKaz",
"contact": {},
"location": {
"lat": 48.134615,
"lng": 11.542325,
"distance": 5,
"country": "Germany",
"cc": "DE"
},
"canonicalUrl": "https://foursquare.com/v/lakaz/512ba29ee4b0386997883496",
"categories": [
{
"id": "4bf58dd8d48988d110941735",
"name": "Italian Restaurant",
"pluralName": "Italian Restaurants",
"shortName": "Italian",
"icon": "https://foursquare.com/img/categories/food/italian.png",
"parents": [
"Food"
],
"primary": true
}
],
"verified": false,
"stats": {
"checkinsCount": 10,
"usersCount": 10,
"tipCount": 0
},
"likes": {
"count": 0,
"groups": []
},
"beenHere": {
"count": 0
}
},
{
ICh möchte 8 der ausgeführten Werte in eine Excel exportieren, die nach Möglichkeit mit dem Namen anfangen sollte und dann in dieser Spalte alle weiteren Eigenschaften mir reinhaut.
Die Dinger sinnd immer gleich aufgebaut.
Habe bisher etwas rumprobiert,
aber nichts richtiges hinbekommen.
Kann mir jemand helfen?
Liebe Grüße, Ramona

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Teile einer Text Datein in Excel
22.04.2013 06:46:31
Oberschlumpf
Hi Ramona
Am besten wäre, du zeigst uns Bsp-Dateien.
1. Bsp-Datei eben genau so eine txt-Datei, um die es geht.
2. Bsp-Datei = die Excel-Datei, in der die Werte aus den txt-Dateien eingetragen werden sollen.
Bei der Excel-Datei trägst du die Werte halt noch per Hand ein, nur, damit wir sehen können, um welche Werte aus den txt-Dateien es dir geht.
Denn zumindest für mich ist deine Fragestellung noch unklar.
Du schreibst zwar "...ICh möchte 8 der ausgeführten Werte in eine Excel exportieren, die nach Möglichkeit mit dem Namen anfangen sollte...", erwähnst aber nicht, um welche 8 Werte es sich genau handelt.
Und wenn du mit Name = Nearby oder LaKaz usw meinst, folgen nämlich diesen Namen unterschiedlich viele Zeilen.
Also, wie gesagt, am besten zwei Bsp-Dateien.
Ciao
Thorsten

Anzeige
AW: Teile einer Text Datein in Excel
22.04.2013 08:45:04
Ramona
Hi,
ok die Frage ist etwas konfus formuliert.
Wie gesagt, die Textdatei hat immer das gleiche Schema. Die sehen dann so aus:
{
"id": "4d388d249784a093fa44e1e8",
"name": "San Francisco Coffee Company",
"contact": {
"phone": "08950222548",
"formattedPhone": "089 50222548"
},
"location": {
"address": "Theresienhöhe 12",
"crossStreet": "Franziska-Bilek-Weg",
"lat": 48.133665882709465,
"lng": 11.544219805221282,
"distance": 177,
"postalCode": "80339",
"city": "München",
"country": "Germany",
"cc": "DE"
},
"canonicalUrl": "https://foursquare.com/v/san-francisco-coffee-company/4d388d249784a093fa44e1e8",
"categories": [
{
"id": "4bf58dd8d48988d1e0931735",
"name": "Coffee Shop",
"pluralName": "Coffee Shops",
"shortName": "Coffee Shop",
"icon": "https://foursquare.com/img/categories/food/coffeeshop.png",
"parents": [
"Food"
],
"primary": true
}
],
"verified": false,
"stats": {
"checkinsCount": 960,
"usersCount": 208,
"tipCount": 1
},
"likes": {
"count": 0,
"groups": []
},
"beenHere": {
"count": 0
}
},
{
"id": "4e0f7e2f7d8bb178a8b33f35",
"name": "Abant",
"contact": {},
"location": {
"lat": 48.13375113288785,
.
.
.
Das ist eine Ausgabe aus der Foursquare API. Davon habe ich ca. 1500.
Ich würde jetzt gerne einige der Werte dieser 1500 Ausgaben in eine übersichtliche Tabelle bekommen.
Die Tabelle hätte folgende Felder:
Spalte A Spalte B Spalte C Spalte D Spalte E Spalte F Spalte G Spalte H
Nummer Name Address postalCode lat long CheckinsCount userCount
(die Nummer würde ich einfach nach unten ziehen: 1500)
Das Makro würde also wie folgt vorgehen:
erstes Feld auslesen = wenn "Name" gefunden, diesen Wert dann in B2
darauffolgender Wert für Address in C2
postalCode in D2
lat in E2
.
.
.
Außerdem müsste das Makro jedes zweite "Name" vernachlässigen, da ja diese Kategorie leider zweimal pro Venue vorkommt (beim zweiten Mal ist es eine Untekategorie, die ich nicht brauche)
Mein bisheriger Ansatz:
Sub Tabelle Foursquare
'hier meine 7 Ausgabespalten
Dim name as String
Dim address as String
Dim postalCode as Integer
Dim lat as Double
Dim long as Double
Dim checkinsCount as Long
Dim userscount as Long
open "C:\ (Addresse meiner txt Datei)
'jetzt müsste ich die 7 Ausgaben irgendwie erfassen können
worksheets("Roh_4sq").Range("b2-b1501") = inputbox(" ")
wie man sieht, bin ich nicht wirklich voran gekommen...

Anzeige
AW: Teile einer Text Datein in Excel
22.04.2013 08:47:08
Ramona
Achso in der Textdatei ist sonst nichts drin.
Keine Formatierung, wirklich nur diese
{
"id": "4d388d249784a093fa44e1e8",
"name": "San Francisco Coffee Company",
"contact": {
.
.
.
}
Das sieht also genauso aus, wie ich es hier ins Forum kopiere.
LG

AW: Teile einer Text Datein in Excel
22.04.2013 10:35:06
Oberschlumpf
Hi Ramona
Du hast mich leider falsch verstanden, oder diesmal hab ich mich konfus ausgedrückt.
Ich meinte mit den Bsp-Dateien, dass du sie uns per FILE-UPLOAD zur Verfügung stellst.
Den Button zum File-Upload findest du ober- und unterhalb des Textfeldes, in dem du deine Antwort(en) einträgst.
So, bitte zeig uns also per UPLOAD eine txt-Datei und deine Excel-Datei.
In die Excel-Datei trägst du bitte die Werte per Hand ein, die wir für dich aus den txt-Dateien auslesen sollen.
Ciao
Thorsten

Anzeige
AW: Teile einer Text Datein in Excel
22.04.2013 10:47:22
Rudi
Hallo,
teste mal:
Sub aaa()
Dim sTmp, i As Long, j As Integer, n As Integer, arrTmp, sItem As String, bln As Boolean
Dim objDaten As Object, arrDaten(), arr(7)
Set objDaten = CreateObject("Scripting.Dictionary")
Open "c:\temp\test.txt" For Input As #1
sTmp = Split(Input(LOF(1), 1), vbCrLf)
Close #1
objDaten(0) = Array("Nr.", "Name", "address", "lat", "lng", "postalCode", "checkinscount", " _
userscount")
For i = 0 To UBound(sTmp)
arrTmp = Split(sTmp(i), ":")
If UBound(arrTmp) > 0 Then
sItem = Trim(Replace(arrTmp(1), Chr(34), ""))
sItem = Left(sItem, Len(sItem) - 1)
Select Case LCase(Trim(Replace(arrTmp(0), Chr(34), "")))
Case "id"
bln = Not bln
n = n - bln
If bln Then Erase arr
Case "name"
If bln Then
arr(0) = n
arr(1) = sItem
End If
Case "address": arr(2) = sItem
Case "lat": arr(3) = sItem
Case "lng": arr(4) = sItem
Case "postalcode": arr(5) = sItem
Case "checkinscount": arr(6) = sItem
Case "userscount": arr(7) = sItem
End Select
objDaten(n) = arr
End If
Next
ReDim arrDaten(1 To objDaten.Count, 1 To 8)
For i = 0 To n
arrTmp = objDaten(i)
For j = 0 To 7
arrDaten(i + 1, j + 1) = arrTmp(j)
Next
Next
Sheets(1).Cells(1, 1).Resize(UBound(arrDaten), UBound(arrDaten, 2)) = arrDaten
End Sub

Gruß
Rudi

Anzeige
AW: Teile einer Text Datein in Excel
23.04.2013 10:39:45
Ramona
Hey,
schonmal danke für die Antwort! Das sieht schonmal genau nach dem aus, was ich brauche - allerdings gibts noch einen Syntaxfehler, also aktuell bekomme ich den Code noch nicht zum Laufen.
Ich hänge mal zwei Dateien an, in der .txt sieht man, was ich auslesen will.
Wie gesagt, die eigentliche Datei sieht genauso aus, nur wesentlich größer (ü2 MB)
und in der angehängten excel habe ich einfach die Ausgabespalten (hier 9, ich würde noch die url und diesen categoryname mitnehmen. Sollte ja "einfach" erweiterbar sein.
Ich experimentiere jetzt mit der Antwort von Rudi herum. Vielen lieben Dank dafür schonmal!
Hier die links:
https://www.herber.de/bbs/user/85005.xlsx
https://www.herber.de/bbs/user/85006.txt

Anzeige
AW: Teile einer Text Datein in Excel
23.04.2013 11:27:01
Ramona
Top, ich habe das Problemchen gefunden und dein Makro zum Laufen bekommen.
Vielen Dank schonmal!
Das restliche Problem sollte kleiner sein:
Ich habe das Makro zum Laufen bekommen, indem ich
sItem = Left(sItem, Len(sItem) - 1)
weggenommen habe. Interpretiere ich richtig, dass Du mit diesem Ausdruck das , wegnehmen wolltest? Denn das ist noch dran (nicht so sehr störend, wäre aber noch gut wenn man das weg hätte)
Jedenfalls hat das Ergebnis noch einen kleineren Fehler, und zwar springt Excel jetzt manchmal zwischen den Namen und den Kategorien von den Läden hin und her. Das liegt daran, das beide als "name" bezeichnet sind.
Leider sind die Daten nicht perfekt normiert, weswegen ab und an der Bereich "Categories" nicht enthalten ist. Folgerichtig springt Excel lässt Excel dann den nächsten, richtigen "name" weg und nimmt beim nächsten vorhandenen dann dessen "name" (in der Category)
Die Ausgaben mit fehlenden categories schreiben dann folgendes:
"categories": [],
und springen dann regulär in das Feld verified.
Ist es möglich, einen solchen Ausdruck so zu formulieren, dass wenn VBA so etwas findet:
"categories": [],
dass es dann dieses Feld trotzdem in "name" zählt (= damit die Reihenfolge gelich bleibt)?

Anzeige
AW: Teile einer Text Datein in Excel
23.04.2013 12:33:21
Rudi
Hallo,
teste mal:

Sub ramona()
Dim sTmp, i As Long, j As Integer, n As Integer
Dim arrTmp, sItem As String, blnCat As Boolean
Dim objDaten As Object, arrDaten(), arr()
Dim arrHeader
Dim sFile As String
arrHeader = Array("Nr.", "Name", "loc_address", _
"loc_postal", "canonical_url", "loc_lat", "loc_lng", _
"cat_name", "stats_checkinscount", "stats_userscount ")
ReDim arr(UBound(arrHeader))
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Datei wählen"
.AllowMultiSelect = False
If .Show = -1 Then
sFile = .SelectedItems(1)
End If
End With
If sFile  "" Then
Set objDaten = CreateObject("Scripting.Dictionary")
Open sFile For Input As #1
sTmp = Split(Input(LOF(1), 1), vbCrLf)
Close #1
Do
'erste ID suchen
arrTmp = Split(sTmp(i), ":")
If UBound(arrTmp) > 0 Then
If LCase(Trim(Replace(arrTmp(0), Chr(34), ""))) = "id" Then
Exit Do
End If
End If
i = i + 1
Loop
Do
arrTmp = Split(sTmp(i), ":")
If UBound(arrTmp) > 0 Then
sItem = Trim(Replace(arrTmp(1), Chr(34), ""))
If Len(arrTmp(1)) Then
sItem = Left(sItem, Len(sItem) - 1)
Select Case LCase(Trim(Replace(arrTmp(0), Chr(34), "")))
Case "categories": blnCat = True
Case "id"
n = n + 1 + blnCat
If Not blnCat Then ReDim arr(UBound(arrHeader))
Case "name"
If blnCat Then
arr(7) = sItem
blnCat = False
Else
arr(0) = n
arr(1) = sItem
End If
Case "address": arr(2) = sItem
Case "postalcode": arr(3) = sItem
Case "canonicalurl": arr(4) = sItem & Left(arrTmp(2), Len(arrTmp(2)) - 2)
Case "lat": arr(5) = sItem
Case "lng": arr(6) = sItem
Case "checkinscount": arr(8) = sItem
Case "userscount": arr(9) = sItem
End Select
objDaten(n) = arr
End If
End If
i = i + 1
Loop Until i > UBound(sTmp)
objDaten(0) = arrHeader
ReDim arrDaten(1 To objDaten.Count, 1 To UBound(arrHeader) + 1)
For i = 0 To n
arrTmp = objDaten(i)
For j = 0 To UBound(arrHeader)
arrDaten(i + 1, j + 1) = arrTmp(j)
Next
Next
With Sheets(1)
.Cells.Clear
.Cells(1, 1).Resize(UBound(arrDaten), UBound(arrDaten, 2)) = arrDaten
End With
End If
End Sub

Gruß
Rudi

Anzeige
AW: Teile einer Text Datein in Excel
23.04.2013 11:32:21
Rudi
Hallo,
Sub ramona()
Dim sTmp, i As Long, j As Integer, n As Integer
Dim arrTmp, sItem As String, bln As Boolean
Dim objDaten As Object, arrDaten(), arr()
Dim arrHeader
Dim sFile As String
arrHeader = Array("Nr.", "Name", "loc_address", _
"loc_postal", "canonical_url", "loc_lat", "loc_lng", _
"cat_name", "stats_checkinscount", "stats_userscount ")
ReDim arr(UBound(arrHeader))
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Datei wählen"
.AllowMultiSelect = False
If .Show = -1 Then
sFile = .SelectedItems(1)
End If
End With
If sFile  "" Then
Set objDaten = CreateObject("Scripting.Dictionary")
Open sFile For Input As #1
sTmp = Split(Input(LOF(1), 1), vbCrLf)
Close #1
For i = 0 To UBound(sTmp)
arrTmp = Split(sTmp(i), ":")
If UBound(arrTmp) > 0 Then
sItem = Trim(Replace(arrTmp(1), Chr(34), ""))
If Len(arrTmp(1)) Then
sItem = Left(sItem, Len(sItem) - 1)
Select Case LCase(Trim(Replace(arrTmp(0), Chr(34), "")))
Case "id"
bln = Not bln
n = n - bln
If bln Then ReDim arr(UBound(arrHeader))
Case "name"
If bln Then
arr(0) = n
arr(1) = sItem
Else
arr(7) = sItem
End If
Case "address": arr(2) = sItem
Case "postalcode": arr(3) = sItem
Case "canonicalurl": arr(4) = sItem & Left(arrTmp(2), Len(arrTmp(2)) - 2)
Case "lat": arr(5) = sItem
Case "lng": arr(6) = sItem
Case "checkinscount": arr(8) = sItem
Case "userscount": arr(9) = sItem
End Select
objDaten(n) = arr
End If
End If
Next
objDaten(0) = arrHeader
ReDim arrDaten(1 To objDaten.Count, 1 To UBound(arrHeader) + 1)
For i = 0 To n
arrTmp = objDaten(i)
For j = 0 To UBound(arrHeader)
arrDaten(i + 1, j + 1) = arrTmp(j)
Next
Next
With Sheets(1)
.Cells.Clear
.Cells(1, 1).Resize(UBound(arrDaten), UBound(arrDaten, 2)) = arrDaten
End With
End If
End Sub

Gruß
Rudi

Anzeige
AW: Teile einer Text Datein in Excel
23.04.2013 13:38:50
Ramona
wow, ich musste nichts mehr tun... funktioniert perfekt!
Rudi, super vielen Dank dir!!

AW: Teile einer Text Datein in Excel
24.04.2013 12:38:37
Ramona
...leider bin ich doch noch nicht fertig.
Jetzt habe ich einen ganz ähnlichen Ausdruck:
https://www.herber.de/bbs/user/85033.txt
Unten ist ein Auszug:
Wie man sieht, sind die Ergebnisse etwas länger. Die Formatierung bleibt gleich.
Ich habe Rudis makro für die erste Anfrage genommen und das Array auf 2 verkleinert (da ich nur noch den Namen und das Rating brauche.
Leider spuckt mir das Makro nur einen Teil der Ergebnisse, meist ohne Namen aus.
Ich sehe, dass das Makro das falsche "name" beim ersten Mal zieht - es landet gleich zwei "name" zu weit unten (in dieser Abfrage ist ein weiteres "name" eingezogen, so dass ich nur jedes dritte ziehen will.)
Eigentlich müsste es ja nur eine minimale Änderung sein, da die Deklarationen etc. gleich bleiben?
"totalResults": 98,
"groups": [
{
"type": "Recommended Places",
"items": [
{
"reasons": {
"count": 1,
"items": [
{
"type": "general",
"message": "This spot is popular"
}
]
},
"venue": {
"id": "4ade0cd3f964a520446921e3",
"name": "Theresienwiese",
"contact": {},
"location": {
"address": "Bavariaring",
"crossStreet": "Theresienhöhe",
"lat": 48.13166854919786,
"lng": 11.549849510192871,
"distance": 2412,
"postalCode": "80336",
"city": "München",
"country": "Germany",
"cc": "DE"
},
"canonicalUrl": "https://foursquare.com/v/theresienwiese/4ade0cd3f964a520446921e3",
"categories": [
{
"id": "4bf58dd8d48988d15f941735",
"name": "Field",
"pluralName": "Fields",
"shortName": "Field",
"icon": "https://foursquare.com/img/categories/parks_outdoors/default.png",
"parents": [
"Outdoors & Recreation"
],
"primary": true
}
],
"verified": false,
"stats": {
"checkinsCount": 5053,
"usersCount": 1802,
"tipCount": 18
},
"url": "http://de.wikipedia.org/wiki/theresienwiese",
"likes": {
"count": 29,
"groups": [
{
"type": "others",
"count": 29,
"items": []
}
],
"summary": "29 likes"
},
"like": false,
"rating": 9.18,
"beenHere": {
"count": 0,
"marked": false
},
"specials": [],
"photos": {
"count": 236,
"groups": []
},
"hereNow": {
"count": 1,
"groups": [
{
"type": "others",
"name": "Other people here",
"count": 1,
"items": []
}
]
}
},
"tips": [
{
"id": "4f495f09e4b09620886b9999",
"createdAt": 1330208521,
"text": "Come here during Oktoberfest!",
"canonicalUrl": "https://foursquare.com/item/4f495f09e4b09620886b9999",
"likes": {
"count": 0,
"groups": []
},
"logView": true,
"todo": {
"count": 4
},
"done": {
"count": 28
},
"user": {
"id": "22477478",
"firstName": "Visit Munich",
"gender": "none",
"photo": "https://is1.4sqi.net/userpix_thumbs/ZDDZMTIVCSSV32BM.png",
"type": "page",
"followers": {
"count": 2009,
"groups": []
},
"tips": {
"count": 20
},
"lists": {
"groups": [
{
"type": "created",
"count": 2,
"items": []
}
]
},
"homeCity": "München, Germany",
"bio": "",
"contact": {
"twitter": "visitmunich",
"facebook": "108378172646122"
}
}
}
],
"phrases": [
{
"phrase": "oktoberfest",
"sample": {
"entities": [
{
"indices": [
8,
19
],
"type": "keyPhrase"
}
],
"text": "... the Oktoberfest."
},
"count": 4
},
{
"phrase": "oktoberfest",
"sample": {
"entities": [
{
"indices": [
16,
27
],
"type": "keyPhrase"
}
],
"text": "... here during Oktoberfest!"
},
"count": 2
},
{
"phrase": "tradition",
"sample": {
"entities": [
{
"indices": [
16,
25
],
"type": "keyPhrase"
}
],
"text": "... im Festzelt Tradition nicht verpassen!"
},
"count": 1
}
],
"referralId": "e-0-4ade0cd3f964a520446921e3-0"
},
{
"reasons": {
"count": 1,
"items": [
{
"type": "general",
"message": "This spot is popular"
}
]
},
"venue": {
"id": "4ade0cd5f964a5204e6921e3",
"name": "Tierpark Hellabrunn",
"contact": {},
"location": {
"address": "Tierparkstr. 30",
"lat": 48.09969785289792,
MAKRO
Sub einlesen()
Dim sTmp, i As Long, j As Integer, n As Integer
Dim arrTmp, sItem As String, blnCat As Boolean
Dim objDaten As Object, arrDaten(), arr()
Dim arrHeader
Dim sFile As String
arrHeader = Array("Nr.", "Name", "rating")
ReDim arr(UBound(arrHeader))
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Datei wählen"
.AllowMultiSelect = False
If .Show = -1 Then
sFile = .SelectedItems(1)
End If
End With
If sFile  "" Then
Set objDaten = CreateObject("Scripting.Dictionary")
Open sFile For Input As #1
sTmp = Split(Input(LOF(1), 1), vbCrLf)
Close #1
Do
'erste ID suchen
arrTmp = Split(sTmp(i), ":")
If UBound(arrTmp) > 0 Then
If LCase(Trim(Replace(arrTmp(0), Chr(34), ""))) = "id" Then
Exit Do
End If
End If
i = i + 1
Loop
Do
arrTmp = Split(sTmp(i), ":")
If UBound(arrTmp) > 0 Then
sItem = Trim(Replace(arrTmp(1), Chr(34), ""))
If Len(arrTmp(1)) Then
sItem = Left(sItem, Len(sItem) - 1)
Select Case LCase(Trim(Replace(arrTmp(0), Chr(34), "")))
Case "categories": blnCat = True
Case "id"
n = n + 1 + blnCat
If Not blnCat Then ReDim arr(UBound(arrHeader))
Case "name"
If blnCat Then
arr(2) = sItem
blnCat = False
Else
arr(0) = n
arr(1) = sItem
End If
Case "rating": arr(2) = sItem
End Select
objDaten(n) = arr
End If
End If
i = i + 1
Loop Until i > UBound(sTmp)
objDaten(0) = arrHeader
ReDim arrDaten(1 To objDaten.Count, 1 To UBound(arrHeader) + 1)
For i = 0 To n
arrTmp = objDaten(i)
For j = 0 To UBound(arrHeader)
arrDaten(i + 1, j + 1) = arrTmp(j)
Next
Next
With Sheets(1)
.Cells.Clear
.Cells(1, 1).Resize(UBound(arrDaten), UBound(arrDaten, 2)) = arrDaten
End With
End If
End Sub

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige