Geöffnete Dateien (Suchzeichen aus Dateinamen)Alle,
Ich versuche, Dateien in einem Ordner zu öffnen, indem ich auf der Grundlage von Benutzereingaben nach Zeichen des Dateinamens suche.
/* Input values in 3 columns by user. eg of file name: ABC_12_XYZ. User will input ABC in 1st column, 12 in second col and XYZ in 3rd column. all three should match in a row for selecting the file. There could be 100's of files (unique name) in the folder. User will input all that he wants to select from folder into input file. The file name search is limited to 10 characters from beginning of file name. The code is getting stuck somewhere in loop*/
//Script ------
Retrieve = Open( "C:\*\inputfile.jmp" );
x = Column( Retrieve, "Col1" ) << Get Values;
y = Column( Retrieve, "Col2" ) << Get Values;
z = Column( Retrieve, "Col3" ) << Get Values;
// location of files which needs to be read from a folder based on user inputs.
Set Default Directory("C:\test\");
Close( Retrieve, NoSave );
Col1_search = 1;
Col2_search = 1;
Count = 0;
For( i = 1, i <= N Items( files ), i++,
For( j = 1, j <= N Items( z ), j++,
If( Contains( files[i], z[j] ),
If( Col1_search == 1,
If( (Contains( files[i], z[j] ) & Contains( Left( files[i], 10 ), x[j] )) > 0,
If( Col2_Search == 1,
If(
((Contains( files[i], z[j] ) & Contains( Left( files[i], 10 ), x[j] )) > 0) & (Contains( Left( files[i], 10 ), y[j] ) > (Contains( Left( files[i], 10 ), x[j] ))),
Open( files[i] );
Count++;
),
Open( files[i] );
If( Count == N Items( z ),
Break();
);
)
)
),
Open( files[i] )
)
);
);
openDTs = {};Betreff: Dateien öffnen (Suchzeichen aus Dateinamen)@Uday
Ich kann das Problem herausfinden. Die Quelle umfasst 18 Zeichen und das Muster ist eine vollständige Zeichenfolge.
Ich habe eine weitere Schleife hinzugefügt, um die Eingabedateien anhand aller Dateien wie unten zu vergleichen.
Schätzen Sie Ihre schnellen Antworten!
Danke!
Für ( ich = 1 , ich <= N Artikel ( Dateien ) , ich ++,
Für ( J = 1 , J <= N Artikel ( X ) , J ++,
Wenn ( ! Wird vermisst ( Regex ( Substr ( Dateien [ ich ] , 1 , 18 ) , Verkohlen ( X [ J ] || „_“ || j [ J ] || „_“ || z [ J ] ) ) ) ,
Offen ( TestDir || „\“ || Dateien [ ich ] ) ;
Brechen () ;
) ;,
)
) ;
Betreff: Dateien öffnen (Suchzeichen aus Dateinamen)dt = Open( "$SAMPLE_DATA/Cities.jmp" ); // Open Sample Data
dt << Select Where(!IsMissing(Regex(Char(:city),"ALB")));
Sie müssen die Funktion „Enthält“ nicht verwenden. Schauen Sie sich das oben gezeigte Beispiel an. Wenn Sie nur nach 18 Zeichen des Dateinamens suchen möchten, müssen diese mit der Substr-Funktion extrahiert werden
dt = Open( "$SAMPLE_DATA/Cities.jmp" ); // Open Sample Data
dt << Select Where(!IsMissing(Regex(Char(:city),Substr("ALBANY",1,3))));
Betreff: Dateien öffnen (Suchzeichen aus Dateinamen)Hier ist eine Kopie des Protokolls –
Im folgenden Skript ist der Fehler mit /*###*/ markiert.
For( i = 1, i <= N Items( Files ), i++,
Wenn(
!Wird vermisst(
Regex/*###*/(Char(
x || /*###*/"_" || /*###*/y || /*###*/"_" || /*###*/z/*###*/
), Dateien[i])
),
Open( TestDir || "\" || Files[i] )
)
)
Der Grund, warum ich „Contains“ verwende, besteht darin, nach 18 Zeichen aus dem Dateinamen zu suchen, der 40 Zeichen lang sein könnte.
Ich bin mir nicht sicher, ob ich es richtig mache.
Betreff: Dateien öffnen (Suchzeichen aus Dateinamen)@CG ,
Können Sie uns mitteilen, was der Fehler ist? Eine Kopie Ihres Protokolls?
Außerdem verstehe ich nicht, warum Sie ein Contains hinzufügen?
Das zweite Argument sollte der Begriff sein, den Sie vergleichen möchten:
Wenn Sie also nach Ihrem Namen suchen würden, würde dieser wie folgt aussehen:
If (!IsMissing(Regex(Char(x || "_" || y || "_"||z),"CG")),
Betreff: Dateien öffnen (Suchzeichen aus Dateinamen)Ich suche nach den ersten 18 Zeichen im Dateinamen
Ich habe die folgende Schleife geändert und eine Bedingung hinzugefügt, um nach 18 Zeichen bis zu Z für den Dateinamen x_y_z1234 zu suchen
für ( ich = 1 , ich <= N Artikel ( Dateien ) , ich ++,
Wenn ( ! Wird vermisst ( Regex ( Verkohlen ( X || „_“ || j || „_“ || z ) , enthält ( Links ( Dateien [ ich ]) , 18 )) ,
Offen ( TestDir || „\“ || Dateien [ ich ]) ;
) ,
) ;
) ;
Aber ich bekomme immer noch die Fehlermeldung -
For( i = 1, i <= N Items( Files ), i++,
If/*###*/(Fehlt(
Regex( Char( x || "_" || y || "_" || z ), Contains( Left( Files[i] ), 18 ) ),
Open( TestDir || "\" || Files[i] )
))
)
Betreff: Dateien öffnen (Suchzeichen aus Dateinamen)@CG ,
Kann man davon ausgehen, dass das Dateiformat in Ihrem Fall immer ABC_12_XYZ (dh x_y_z) sein wird? Wenn ja, könnte ein alternativer und einfacherer Weg sein:
Retrieve = Open( "C:\*\inputfile.jmp" );
x = Column( Retrieve, "Col1" ) << Get Values;
y = Column( Retrieve, "Col2" ) << Get Values;
z = Column( Retrieve, "Col3" ) << Get Values;
Close(Retrieve,"No Save");
TestDir = "C:\test\";
Files = Files In Directory(TestDir); // Returns a list of files in the directory
for(i = 1, i <= N Items(Files), i++,
If(!IsMissing(Regex(Char(x || "_" || y || "_"||z),Files[i])),
Open(TestDir ||"\" || Files[i]);
);
);