Sorry, versuche es bestmöglich zu erklären, drücke mich wohl einfach nur zu unklar aus. Versuche mich hier auch gerade der Lösung anzunähren. Letztlich geht es darum, dass er jeden Downloadlink, der im Abschnitt:
Code:
for i=1:32;
root = idx_data{i};
root=strtrim(root(99:150));
extention{i} = root;
end
erzeugt wird an der entsprechenden Stelle (fett markiert:edgar/data/712034/0001047469-08-002056.txt) mit der Liste abgleicht und nur dann den Downloadlink ausführt, wenn eben ein Match mit einer CIK aus der Liste vorliegt.
Das sollte dann vielleicht sogar ohne zusätzlichen Loop gehen oder?
Aber wie du an die Nummer aus dem String kommst und mit einer Liste vergleichst, habe ich dir doch bereits in einem Vorschlag gezeigt. Warum fügst du das dann nicht einfach dazu? Es sollte doch wohl reichen wenn 10-K und die Nummer nacheinander überprüft werden.
Ansonsten bitte den relevanten Code inkl. Beispieldaten posten, so dass auch andere ihn ausführen können
vielmehr nacheinander alle Strings geprüft werden, die vom Programm erzeugt werden. Ich weiß, du hattest mir dafür schon eine Vorgehensweise ans Herz gelegt, aber kriege es anscheinend einfach nicht hin, dass er eben nacheinander die Downloadlinks überprüft (insgesamt alle 82979 strings) . Kannst du mir da ggf. einen konkreten Vorschlag machen, wie man das integriert?
Habe schon Wochen gebraucht, um mir die "einfache" Version zusammenzubasteln
Zum Thema Funktionalität.. der Code müsste eigentlich ohne Probleme ausführbar sein, wenn man die jeweiligen lokalen Dateipfade zum abspeichern der .idx und Textdateien entsprechend austauscht. Ansonsten greift ja lediglich auf einen ftp-Server zu, der öffentlich zugänglich ist. Wundert mich grad ziemlich, dass ich der Code nicht ausführbar ist. Welcher Teil lässt sich denn nicht ausführen?
Gruß und danke für die Geduld
Der urlwrite Befehl läuft bei mir u.a. mehrere Minuten...ich habe es dann bei 48Mb abgebrochen und diesen file verwendet.
Bei mir hat er 2 Dateien gefunden, die in der Liste stehen.
Code:
a1=2008:2015;
a2=repmat(a1,4,1);
a=reshape(a2,32,1);
b=repmat([1;2;3;4],8,1);
c=1:32;
d=[a b c'];
for i=1:1% Achtung: auf einen file begrenzt
root=['ftp://ftp.sec.gov/edgar/full-index/' num2str(d(i,1)) '/QTR' num2str(d(i,2)) '/form.idx'];
% Indexdateien erstellen urlwrite(root, ['D:\SEC\10-K\form (' num2str(d(i,3)) ').idx'])
% Indexdateien wurden erstellt % f = fullfile(['D:\SEC\10-K\form (' num2str(1) ').idx']); fullfile macht hier keinen Sinn text=fileread(['D:\SEC\10-K\form (' num2str(i) ').idx']);
% Ausschließlich 10-K Filings suchen
idx_data = transpose(regexpi(text,'10-K [^\n]*','match'));
n=size(idx_data,1);
for k=1:n
link = idx_data{k,1};
idxstart = strfind(link,'/data/');
idxend = strfind(link,'/');
num = link(idxstart+6:idxend(end)-1);
addzeros = 10 - numel(num) + 1;
% füge entsprechend Nullen hinzu für 10-stellige Zahl: hier im Bsp. 0000313798
ident = [strzeros{addzeros} num];
% Suche Nummer in Liste
match = sum(strcmp(ident,IdentList));
if match == 1 % Nummer in Liste gefunden -> Download disp(['lade: ' link]) end
Danke!! Ist echt eine riesen Hilfe, jetzt muss ich nur noch schauen, wie ich den Download-Loop reinbaue, wenn ich das richtig verstanden habe.. das sollte ich hoffentlich hinkriegen
Warum eine weitere Schleife? Aktuell wird eine Index Datei erzeugt, alle 10-K Einträge ermittelt und dann in einer weiteren Schleife die Einträge auf das CIK hin mit der Liste überprüft. Daher müsstest du hier
Code:
if match == 1 % Nummer in Liste gefunden -> Download disp(['lade: ' link]) end
doch einfach nur den Link für den Download nutzen. Ist die 2. Schleife fertig, sind somit alle 10-k mit den gewünschten CIK heruntergeladen worden. Nun würde die 1. for Schleife die nächste Index Datei erzeugen und die Überprüfung geht von vorn los.
ja herausgelassen hast. Daher sind das in dem Sinne noch keine Downloadlinks, sondern nach wie vor Strings, die erst noch zugeschnitten werden müssen, bevor ich direkt auf die "zugreifen" kann. Oder sehe ich das grad falsch?
habe hier jetzt nochmal etwas rumgebastelt, das mit dem Trimmen klappt, in dem ich den Code anpasse. Er kürzt dann die beiden Funde aus dem Beispiel auf:
Wenn ich es probiere, und an den Loop k=1:n anpasse, kann er das jedoch nicht ausführen. Kannst du mir sagen, wo mein Fehler liegt?
Hierzu nochmal das gesamte Programm inklusive meinem Vorschlag:
Code:
a1=2008:2015;
a2=repmat(a1,4,1);
a=reshape(a2,32,1);
b=repmat([1;2;3;4],8,1);
c=1:32;
d=[a b c'];
for k=1:n
link = idx_data{k,1};
idxstart = strfind(link,'/data/');
idxend = strfind(link,'/');
num = link(idxstart+6:idxend(end)-1);
addzeros = 10 - numel(num) + 1;
ident = [strzeros{addzeros} num];
match = sum(strcmp(ident,IdentList));
if match == 1
link=strtrim(link(99:150));
% Resultat, z.B: edgar/data/3197/0001193125-08-058939.txt. % Wo ist die Fehler im nachfolgenden Schritt?
extention{k} = link;
m1='ftp://ftp.sec.gov/';
m2 = extention{k};
urlwrite([m1 m2],['D:\SEC\10-K\form\' num2str(k) '.txt'],'Timeout',10);
end
Wenn ich es probiere, und an den Loop k=1:n anpasse, kann er das jedoch nicht ausführen. Kannst du mir sagen, wo mein Fehler liegt?
Nein, da für mich nicht nachvollziehbar. Was heißt nicht ausführen? Gibt es eine Fehlermeldung? Für mich macht der Code in der if Bedingung keinen Sinn.
Meinst du evtl. das?
Code:
if match == 1 % Nummer in Liste gefunden -> Download disp(['lade:' link])
idxstart = strfind(link,'edgar/');
link = strtrim(link(idxstart:end));
urlwrite(['ftp://ftp.sec.gov/' link],['D:\SEC\10-K\form\' num2str(k) '.txt'],'Timeout',10);
end
P.S. ich habe unter der Woche nicht immer Zeit mich diesem Forum zu widmen, speziell wenn die Frage nicht mit einem 3-Zeiler beantwortet werden kann. Da ist eine Nachfrage per PN um Hilfe zu erhalten auch eher kontraproduktiv. Ich antworte schon noch auf Fragen, so fern ich die Antwort kenne, sowie Zeit und Lust dazu habe.
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.