This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
----- Original Message ----- From: "Robert Van Wie" <address@hidden> To: <address@hidden> Sent: Monday, July 08, 2002 10:03 AM Subject: all > > import java.awt.*; > import java.io.*; > import java.awt.event.*; > import javax.swing.*; > import ucar.ma2.*; > import ucar.nc2.*; > > public class make > { > private static String parms[] = new String[8]; > private static int numArgs; > public net nt; > NetcdfFileWriteable ncfle; > > make( String parms[] ) { // constructor > > if ( parms[0] == null ) return; > NetcdfFileWriteable ncfle = new NetcdfFileWriteable(); > net nt = new net( ncfle ); > nt.netHead( ); > } // end constructor > > public static void main( String args[] ) { > numArgs = args.length; > parms[0] = args[0]; > if ( numArgs > 1 ) parms[1] = args[1]; > new make( parms ); > } > } // end make > > import ucar.ma2.*; > import ucar.nc2.*; > import java.io.IOException; > import java.util.*; > > public class net extends NetcdfFile { > > String ncfle = "medsAscii.nc"; > String outfle = "netOut"; > > net( NetcdfFileWriteable ncfle ) { super(); } > > public void netHead( ) { > char Aray[] = { ' ',' ',' ',' '}; > char Aray2[][]; > int noProf = 2; > > NetcdfFileWriteable ncfle = new NetcdfFileWriteable(); > String profileType[]={"TEMP","PSAL"}; > new net( ncfle ); > ncfle.setName(outfle); // output file name > > Dimension profDim = ncfle.addDimension("profile", 4); > Dimension[] dimM = new Dimension[1]; > dimM[0] = profDim; > Aray2 = new char[ 2 ][ 4 ]; > for( byte n=0; n < 2; n++ ) { > Aray = to_char( profileType[n] ); > for( byte m=0; m < 4; m++ ) Aray2[n][m] = Aray[m]; > } > ncfle.addVariable("Profile Code", char.class, new Dimension[] {profDim}); > ncfle.addVariableAttribute("Profile Code", "units", "GTSPP Code Tables"); > try { > ncfle.create(); // create CDF binary file > } catch (IOException e) { System.out.println("ERROR creating file"); } > System.out.println( "ncfle = "+ ncfle); > > try { // write CDF binary file > // ncfle.write("Profile Code",ArrayAbstract.factory( Aray2 )); // does not work > for( byte n=0; n < 2; n++ ) > for( byte k=0; k < 4; k++ ) Aray[k] = Aray2[n][k]; > ncfle.write("Profile Code",ArrayAbstract.factory( Aray )); // works ! > } catch (IOException e) { System.out.println("ERROR creating file"); } > try { ncfle.close(); > } catch (IOException e) { System.out.println("ERROR closing file"); } > } // end netHead > > char[] to_char( String strng ) { // convert to character array > > int len = strng.length(); > char Array[]; // input character array > > Array = new char[ len ]; > strng.getChars(0, len, Array, 0 ); // place into char array > return Array; > } // end dateLeadBlanks method > } > July 2, 2002 > To Whom It may Concern: > > Using java, I am trying to write a simple character multi-dimensional > array, named "Aray2" above, into a NetCDF file. > > Please help me. > > Bob Van Wie > address@hidden > 1. normally you should include whatever error messages you see, or explain what you know "does not work" 2. the javadoc says: public static ArrayAbstract factory(java.lang.Object javaArray) Generate a new Array from a java multidimensional array of primitives. This makes a COPY of the data values of javaArray. since it makes a copy of the array, you need to fill the array before you write it. Im not sure if this is your problem. 3. I assume you are interested in writing strings. (for byte data, use ArrayByte, not ArrayChar) heres how to write a 2D char array: // write char variable int[] origin = new int[2]; ArrayChar ac = new ArrayChar.D2(n, len) ima = ac.getIndex(); String val = "Testing 1-2-3"; for (j=0; j<val.length(); j++) ac.setChar(ima.set(j), val.charAt(j)); try { ncfile.write("svar", origin1, ac); } catch (IOException e) { System.err.println("ERROR writing Achar"); assert(false); } I realize this is obscure, so Ive added some new helper classes into ArrayChar (release 2.10 now avail). Example, assuming you want to write a single string ArrayChar ac2 = new ArrayChar.D1(str_len); ac2.setString( "Yer String here"); // write String try { ncfile.write("StringVariable", origin, ac2); } catch (IOException e) { } Example, assuming you have an array of n Strings with maximum length max_len: String s[n]; ArrayChar ac2 = new ArrayChar.D2(n, max_len); ac2.setString( 0, s[0]); ac2.setString( 1, s[1]); ac2.setString( 2, s[2]); // write String array try { ncfile.write("StringArray", origin, ac2); } catch (IOException e) { }