Index: libcfa/src/collections/string.cfa
===================================================================
--- libcfa/src/collections/string.cfa	(revision 55b060d686d3cac576f0c518302b16344a6fb205)
+++ libcfa/src/collections/string.cfa	(revision 686912ccff84922e06a89205a52c1eb64f0d8d8e)
@@ -10,6 +10,6 @@
 // Created On       : Fri Sep 03 11:00:00 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Aug 29 18:32:34 2023
-// Update Count     : 153
+// Last Modified On : Thu Aug 31 13:20:41 2023
+// Update Count     : 161
 //
 
@@ -127,38 +127,17 @@
 	} // if
 
+ 	// .---------------,
+ 	// | | | | |...|0|0| check and guard
+ 	// `---------------'
 	enum { gwd = 128 + 2, wd = gwd - 1 };				// guarded and unguarded width
 	char cstr[gwd];										// read in chunks
-	bool cont = false;;
+	bool cont = false;
 
 	if ( f.wd == -1 ) f.wd = wd;
-	const char * scanset = f.scanset;;
-	if ( f.flags.delimit ) scanset = f.delimit;			// getline ?
-
-	size_t len = 0;
-	if ( scanset ) len = strlen( scanset );
-	char fmtstr[len + 16];
-	int start = 1;
-	fmtstr[0] = '%';
-	if ( f.flags.ignore ) { fmtstr[1] = '*'; start += 1; }
-	if ( f.wd != -1 ) { start += sprintf( &fmtstr[start], "%d", f.wd ); }
-
-	if ( ! scanset ) {
-		// %s, %*s, %ws, %*ws
-		fmtstr[start] = 's'; fmtstr[start + 1] = '\0';
-		// printf( "cstr %s\n", fmtstr );
-	} else {
-		// incl %[xxx],  %*[xxx],  %w[xxx],  %*w[xxx]
-		// excl %[^xxx], %*[^xxx], %w[^xxx], %*w[^xxx]
-		fmtstr[start] = '['; start += 1;
-		if ( f.flags.inex ) { fmtstr[start] = '^'; start += 1; }
-		strcpy( &fmtstr[start], scanset );				// copy includes '\0'
-		len += start;
-		fmtstr[len] = ']'; fmtstr[len + 1] = '\0';
-		// printf( "incl/excl %s\n", fmtstr );
-	} // if
+	_Istream_Cstr cfmt = { cstr, (_Istream_str_base)f };
 
 	cstr[wd] = '\0';									// guard null terminate string
 	try {
-		readstr( is, f, fmtstr, cstr );
+		is | cfmt;
 	} catch( cstring_length * ) {
 		cont = true;
@@ -169,5 +148,5 @@
 		cont = false;
 		try {
-			readstr( is, f, fmtstr, cstr );
+			is | cfmt;
 		} catch( cstring_length * ) {
 			cont = true;								// continue not allowed
@@ -183,34 +162,4 @@
 }
 
-// void getline( ifstream & in, string & str, const char delimit = '\n' ) {
-// 	// .---------------,
-// 	// | | | | |...|0|0| check and guard
-// 	// `---------------'
-// 	enum { gwd = 128 + 2, wd = gwd - 1 };				// guarded and unguarded width
-// 	char cstr[gwd];										// read in chunks
-// 	bool cont = false;;
-
-// 	cstr[wd] = '\0';									// guard null terminate string
-// 	try {
-// 		in | getline( wdi( wd, cstr ), delimit );		// must have room for string terminator
-// 		if ( eof( in  ) ) return;						// do not change argument
-// 	} catch( cstring_length * ) {
-// 		cont = true;
-// 	} finally {
-// 		str = cstr;										// ok to initialize string
-// 	} // try
-// 	for ( ; cont; )  {									// overflow read ?
-// 		cont = false;
-// 		try {
-// 			in | getline( wdi( wd, cstr ), delimit );	// must have room for string terminator
-// 			if ( eof( in  ) ) return;
-// 		} catch( cstring_length * ) {
-// 			cont = true;								// continue not allowed
-// 		} finally {
-// 			str += cstr;								// build string chunk at a time
-// 		} // try
-// 	} // for
-// }
-
 ////////////////////////////////////////////////////////
 // Slicing
Index: libcfa/src/collections/string.hfa
===================================================================
--- libcfa/src/collections/string.hfa	(revision 55b060d686d3cac576f0c518302b16344a6fb205)
+++ libcfa/src/collections/string.hfa	(revision 686912ccff84922e06a89205a52c1eb64f0d8d8e)
@@ -10,6 +10,6 @@
 // Created On       : Fri Sep 03 11:00:00 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Aug 29 18:28:04 2023
-// Update Count     : 47
+// Last Modified On : Thu Aug 31 11:47:27 2023
+// Update Count     : 49
 //
 
@@ -83,5 +83,4 @@
 ifstream & ?|?( ifstream & is, _Istream_str f );
 void ?|?( ifstream & is, _Istream_str t );
-void getline( ifstream & in, string & this, const char delimit = '\n' );
 
 // Concatenation
