Basierend auf MATLAB-Code für strtok
(siehe Ende): "Hier ist ein fortgeschritteneres Beispiel, das das erste Token in einer Zeichenfolge findet. Ein Token ist eine Reihe von Zeichen durch Leerzeichen oder ein anderes Zeichen begrenzt. gegeben ein Eingang, übernimmt die Funktion ein Standardtrennzeichen von Leerzeichen, bei zwei, es kann Sie ein anderes Trennzeichen angeben, falls gewünscht es ermöglicht auch zwei mögliche Ausgabeargumente Listen“Verwendung der STRTOK-Funktion
ich habe ein paar Fragen:
1.) Ist ein Begrenzer am Anfang oder Ende eines Tokens angegeben?
So zum Beispiel, wenn ich den Abschnitt eines Textes finden wollte, der mir ein bestimmtes Datum gab und der ganze Text war: "Ich mag das Datum 10. April, weil es nah an Maifeiertag ist". Ich stelle mir vor, dass der Token "April 10" ist, aber der Startbegrenzer wäre "a" und der Endbegrenzer wäre eine Ziffer?
Sie sehen, ich bin verwirrt, was ein "Begrenzer" ist genau im Zusammenhang. In MATLAB würde ich normalerweise das Token als (\ w * \ s \ d *) schreiben, um das Datum (10. April) im Text zu finden, da ich nicht weiß, um welches Datum es sich handelt (mit welchem Buchstaben es beginnt oder) die Ziffern danach). Aber ist ein Trennzeichen das ganze "April 10" oder nur ein "a" am Anfang? Wie würde das helfen, wenn ich nicht weiß, welcher Monat es ist (April, Mai, Juni, usw.) oder funktioniert es im Grunde nur als ein "Finde" Befehl?
lief ich das Programm im Bild gezeigt und versucht, es mit ‚Hallo mein Freund‘ als String und ‚o‘ als Trennzeichen und es gibt: token = Hölle Rest = o mein Freund
So Grundsätzlich bekomme ich den Eindruck, dass Begrenzer am Ende von Feldern oder verschiedenen Regionen verwendet werden, um festzulegen, wann das neue Feld/Abschnitt (Rest) beginnt? Grundsätzlich wird ein Delimiter üblicherweise als einfaches (oder mehr) Zeichengerät verwendet, um den Beginn eines neuen Feldes oder Datums anzuzeigen, während das Format (/d/w*.........) für spezifischere Extraktionen wie Daten verwendet wird wo gibt es kein "Komma" oder einen bestimmten Indikator davor? Sind diese beiden Beobachtungen richtig?
ABER dann, wenn ich laufe es „hallo meinen fri“ als Trennzeichen verwenden (siehe ->running it with delimiter, so scheint es beliebig wählen als den Rest und „nd“ „Ich hallo meinen Freund guten Mann sagen will“ als Token, das ich keinen Sinn, so frage mich, ob es ein Fehler in diesem Programm oder wenn es nur nicht eingerichtet zu handhaben ein Trennzeichen, das zweimal erscheinen läßt.
auch
2) Kann jemand Bitte erläutern Sie, warum [9:13 32] als Standard für ein Eingabeargument festgelegt wurde. Wenn wir davon ausgehen, dass Whitespace das Delimiter ist, was bedeutet das dann [9:13 32]?
3) Gibt es irgendeinen Zweck für die Verwendung von "any", da es von einem Schleife Prozess ausgeführt wird? Würde es nicht jede Iteration überprüfen?
function [token, remainder] = strtok(string, delimiters)
%STRTOK Find token in string.
% TOKEN = STRTOK(STR) returns the first token in the string STR delimited
% by white-space characters. STRTOK ignores any leading white space.
% If STR is a cell array of strings, TOKEN is a cell array of tokens.
%
% TOKEN = STRTOK(STR,DELIM) returns the first token delimited by one of
% the characters in DELIM. STRTOK ignores any leading delimiters.
% Do not use escape sequences as delimiters. For example, use char(9)
% rather than '\t' for tab.
%
% [TOKEN,REMAIN] = STRTOK(...) returns the remainder of the original
% string.
%
% If the body of the input string does not contain any delimiter
% characters, STRTOK returns the entire string in TOKEN (excluding any
% leading delimiter characters), and REMAIN contains an empty string.
%
% Example:
%
% s = ' This is a simple example.';
% [token, remain] = strtok(s)
%
% returns
%
% token =
% This
% remain =
% is a simple example.
%
% See also ISSPACE, STRFIND, STRNCMP, STRCMP, TEXTSCAN.
% Copyright 1984-2009 The MathWorks, Inc.
if nargin<1
error(message('MATLAB:strtok:NrInputArguments'));
end
token = ''; remainder = '';
len = length(string);
if len == 0
return
end
if (nargin == 1)
delimiters = [9:13 32]; % White space characters
end
i = 1;
while (any(string(i) == delimiters))
i = i + 1;
if (i > len),
return,
end
end
start = i;
while (~any(string(i) == delimiters))
i = i + 1;
if (i > len),
break,
end
end
finish = i - 1;
token = string(start:finish);
if (nargout == 2)
remainder = string(finish + 1:length(string));
end
EDIT: war mir nicht bewusst, dass strtok eine integrierte Funktion war. Ich ging davon aus, dass es ein UDF war, das das Lehrbuch als Beispiel aufbaute. Aus diesem Grund gibt es viele Unklarheiten, da das Buch nicht klar angibt, was die Funktion macht.
Dies wurde zum Beispiel nicht im Text angegeben, der nur die Funktion gefunden hat, die das erste Token in einer Zeichenkette gefunden hat.-> token = strtok (str) analysiert den Eingabezeichenvektor str von links nach rechts und gibt einen Teil oder den gesamten Zeichenvektor in token zurück. Wenn Sie das Leerzeichen als Trennzeichen verwenden, beginnt die Token-Ausgabe am Anfang von str. Dabei werden alle Trennzeichen übersprungen, die am Anfang erscheinen könnten, und alle Zeichen bis zum nächsten Trennzeichen oder zum Ende des Zeichenvektors eingeschlossen. Leerraumzeichen umfassen Leerzeichen (ASCII 32), Registerkarten (ASCII 9) und Wagenrücklaufzeichen (ASCII 13).
Urheberrecht 1984-2009 The MathWorks, Inc.
Bitte schreiben Sie den Code als Test und kein Bild – Dan
Ich glaube nicht, dass "strtok" ist die Funktion, die Sie dafür wollen. Ich bin mir ziemlich sicher, dass du 'April 10' nicht mit einem Aufruf von' strtok' extrahieren kannst. Sie können möglicherweise ein Datum der Form "mmmm dd" mit etwas wie regulären Ausdrücken extrahieren. 'strtok' wird Ihre Zeichenfolge in zwei Teile aufteilen, alles vor dem Begrenzer und alles danach. Wenn dein Begrenzer also "a" wäre, dann würdest du "Ich mag den d'' (lol) als dein Token "und" aß den 10. April, weil es nahe am 1. Mai ist "als den Rest. – Dan
[Bitte nicht Bilder des Codes posten. Fügen Sie sie stattdessen in die Antwort ein.] (Http: //meta.stackoverflow.com/questions/285551/why-may-ich-nicht-upload-images-of-code-auf-so-wenn-fragen-eine-frage) –