Как мне нужно изменить тип данных в текстовом файле, чтобы прочитать строку, а не целое число (C ++ / CLI, OleDb)? - PullRequest
0 голосов
/ 06 мая 2019

Моя цель - читать из текстового файла.Этот текстовый файл содержит различные столбцы и строки для каждого значения.Я могу читать файл до тех пор, пока я не изменю тип данных, который окна устанавливают самостоятельно.Но я не хочу, чтобы столбцы «plz» и «nr» были числами (целыми числами), а были текстовым значением (String), потому что plz может содержать значения, такие как «01979», а nr может содержать что-то вроде «4a».Как число начальный ноль будет потерян, и таким образом что-то вроде открытки никогда не достигнет своего предназначения.

Таким образом, мне нужно изменить тип данных в файле "schema.ini".Но это не работает.Я думаю, что делаю некоторые ошибки и не следую инструкциям так, как мне нужно: "Файл Schema.ini"

Каждый раз, когда я пытался прочитать строку, я получал исключение, потому что оновсе еще хочу прочитать значения Int32, которые мне нужно преобразовать в строку.

Я назвал файл "kunde.txt"

knr|nachname|vorname|plz|ort|strasse|nr
1|Müller|Johan|12345|Muster|Musterstr|1
2|Kummer|Freude|23456|Feeling|Gefühlswelt|4a

Col 0 = knr, 1 =nachname, 2 = vorname, 3 = plz, 4 = ort, 5 = strasse, 6 = nr

con->ConnectionString =
    "Provider=Microsoft.JET.OLEDB.4.0;" +
    "Data Source=D:/C++/Quellen;" +
    "Extended Properties=text";
// ....
meineKunden->CommandText =
    "SELECT knr, nachname, vorname, plz, ort, strasse, nr " +
    "FROM kunde.txt ";
// ....
String ^ str;
while(reader->Read()){
    str += Convert::ToString(reader->GetInt32(0));
    str += " ";
    str += reader->GetString(3);
    str += " ";
    str += reader->GetString(6);
    str += "\r\n";
}
this->txb_Insert->Text = str;

Мой schema.ini

[kunde.txt]
ColNameHeader=True  
Format=Delimited(|) 
3=plz Char Width 5
6=nr Char Width 10

Я пробовал с "Col3"вместо "3".Я использовал «Text», а не «Char», и даже пытался использовать его без Width.Но каждый раз я получал одно и то же сообщение об ошибке.Даже если я использую 4 или 7 ... так как я не уверен, как он будет учитываться в файле ini / txt.

Исключение:

System.InvalidCastException: Die angegebene Umwandlung ist ungültig.
bei System.Data.OleDb.ColumnBinding.ValueString()
bei System.Data.OleDb.OleDbDataReader.GetString(Int32 ordinal)

Исключение составляют вызовы ужеstr + = reader-> GetString (3) Если я прав, столбец 3 содержит plz, таким образом.

Может кто-нибудь сказать, что я неправильно понимаю в файле schema.ini?Поскольку я мог читать файл без ошибок, пока я не пытаюсь изменить тип данных в некоторых столбцах, проблемы должны быть с INI-файлом.По крайней мере, я так думаю.

РЕДАКТИРОВАТЬ: я изменил свой INI-файл на:

[kunde.txt]
ColNameHeader=True  
Format=Delimited(|) 
Col1="knr" Integer
Col2="nachname" Text
Col3="vorname" Text
Col4="plz" Text
Col5="ort" Text
Col6="strasse" Text
Col7="nr" Text

Теперь он работает для "плз", но исключение вызывается в последней строке, когдаЯ называю "нр".WTF?

1 Ответ

0 голосов
/ 06 мая 2019

Вы должны убедиться, что способ чтения данных из файла соответствует тому, как он записан.

Так что, если файл не написан вами, и вы должны его использовать, попробуйте узнать, имеет ли он определенную структуру (например, поля с фиксированной длиной записи, поля фиксированной длины с фиксированной длиной и т. Д.) И используйте способ, который подходит этой структуре, чтобы прочитать его.

Также постарайтесь узнать, как поля записей записаны в деталях, потому что способ чтения такой же, как и у вас.

...