1unco ◆manko/yek. [sage]
AAS
935デフォルトの名無しさん [sage]
936デフォルトの名無しさん
937デフォルトの名無しさん [sage]
938デフォルトの名無しさん [sage]
939デフォルトの名無しさん
940デフォルトの名無しさん [sage]
941デフォルトの名無しさん
942937 [sage]
943デフォルトの名無しさん [sage]
944デフォルトの名無しさん [sage]
AAS
2011/04/18(月)17:06:36.77.net
935デフォルトの名無しさん [sage]
この頃は Linux ばっかり使っている
UNIX がインストールされているマシンが身近にない
UNIX がインストールされているマシンが身近にない
2022/02/01(火)13:51:20.76(/+irRzAS.net)
936デフォルトの名無しさん
たとえば古い passwd ファイルの形式とかで使われていた
root:x:0:0:root:/root:/bin/bash
user01:x:500:500::/home/user01:/bin/bash
のような「:」区切りのテキストファイルのデータベースを扱いたいとき
C標準のライブラリは何ですか?
Rust用のcrateで言うと何ですか?
root:x:0:0:root:/root:/bin/bash
user01:x:500:500::/home/user01:/bin/bash
のような「:」区切りのテキストファイルのデータベースを扱いたいとき
C標準のライブラリは何ですか?
Rust用のcrateで言うと何ですか?
2023/08/24(木)18:51:08.86(CY1BVKcv.net)
937デフォルトの名無しさん [sage]
Ruby なら、CSV モジュールを使う
require 'csv'
options = { col_sep: ":" } # 列区切り文字
CSV.foreach( "input.csv", options ) do |row| # 1行ずつ処理する
p row
end
出力
["root", "x", "0", "0", "root", "/root", "/bin/bash"]
["user01", "x", "500", "500", nil, "/home/user01", "/bin/bash"]
require 'csv'
options = { col_sep: ":" } # 列区切り文字
CSV.foreach( "input.csv", options ) do |row| # 1行ずつ処理する
p row
end
出力
["root", "x", "0", "0", "root", "/root", "/bin/bash"]
["user01", "x", "500", "500", nil, "/home/user01", "/bin/bash"]
2023/08/24(木)20:05:39.07(AvQ+uDT8.net)
938デフォルトの名無しさん [sage]
>>830
Rust
区切るだけならstr.split(':')かstr.splitn(7, ':')が各項目のstrを次々と返してくれる
各項目毎に型(文字列や整数やOptionなど)フィールドを持つ構造体に入れるなら一般的にserde crateが万能
そのケースならcsv crateで':'をデリミタ指定すると容易
Rust
区切るだけならstr.split(':')かstr.splitn(7, ':')が各項目のstrを次々と返してくれる
各項目毎に型(文字列や整数やOptionなど)フィールドを持つ構造体に入れるなら一般的にserde crateが万能
そのケースならcsv crateで':'をデリミタ指定すると容易
2023/08/25(金)06:42:11.04(1ayFYibv.net)
939デフォルトの名無しさん
Rust
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=a74bc8e5de0b5fd5e1c4203865abfb2d
っていうか中身読めちゃったテヘペロ
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=a74bc8e5de0b5fd5e1c4203865abfb2d
っていうか中身読めちゃったテヘペロ
2023/08/25(金)09:30:30.62(5+gJach+.net)
940デフォルトの名無しさん [sage]
ちょと治した
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=c7b6a2e68759ea120ea83d56bdc72021
file の reader で読むと
# Hello, and thanks for looking into the Rust Playground's security!
っていう行が勝手に先頭に足される
csv の reader で読むと余計な行が増えない
穴があるんかな
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=c7b6a2e68759ea120ea83d56bdc72021
file の reader で読むと
# Hello, and thanks for looking into the Rust Playground's security!
っていう行が勝手に先頭に足される
csv の reader で読むと余計な行が増えない
穴があるんかな
2023/08/25(金)10:27:32.18(5+gJach+.net)
941デフォルトの名無しさん
ああ has_headers() が読み飛ばしてただけか
2023/08/25(金)10:29:22.44(5+gJach+.net)
942937 [sage]
>>937
を修正。
2, 3列目を整数に変換する
require 'csv'
proc = Proc.new do |field, field_info|
case field_info.index
when 2, 3 then field.to_i
else
field # 処理なし
end
end
options = { col_sep: ":", :converters => proc } # 列区切り文字
CSV.foreach( "input.csv", options ) do |row| # 1行ずつ処理する
p row
end
出力
["root", "x", 0, 0, "root", "/root", "/bin/bash"]
["user01", "x", 500, 500, nil, "/home/user01", "/bin/bash"]
を修正。
2, 3列目を整数に変換する
require 'csv'
proc = Proc.new do |field, field_info|
case field_info.index
when 2, 3 then field.to_i
else
field # 処理なし
end
end
options = { col_sep: ":", :converters => proc } # 列区切り文字
CSV.foreach( "input.csv", options ) do |row| # 1行ずつ処理する
p row
end
出力
["root", "x", 0, 0, "root", "/root", "/bin/bash"]
["user01", "x", 500, 500, nil, "/home/user01", "/bin/bash"]
2023/08/26(土)03:49:56.11(wsJDYSi/.net)
943デフォルトの名無しさん [sage]
C言語とRustについて聞かれているのに
一生懸命Rubyで答えてどうするの?
ちょっと心配した方が良いレベルやぞ
一生懸命Rubyで答えてどうするの?
ちょっと心配した方が良いレベルやぞ
2023/08/26(土)21:18:17.35(C41SkMxi.net)
944デフォルトの名無しさん [sage]
Rustでは文字列から他の型(数値など)への変換やその逆を自動でやってくれる(serdeがある)
以下のように(好きな型名とフィールド名で)構造体を定義するだけで動く
#[derive(Debug, serde::Deserialize)]
struct Passwd {
name: String,
passwd: String,
uid: u32,
gid: u32,
gecos: String,
dir: String,
shell: String,
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
// CSVリーダーをヘッダ無しで区切り文字コロンでPASSWD_PATHファイルから読み込みで作成
let mut reader = csv::ReaderBuilder::new()
.has_headers(false)
.delimiter(b':')
.from_reader(std::fs::File::open(PASSWD_PATH)?);
// 各行を構造体Passwdへ読み込む (様々なエラーを捕捉できるようResult型が返る)
for result in reader.deserialize::<Passwd>() {
let passwd = result?;
println!("{passwd:?}");
}
Ok(())
}
以下のように(好きな型名とフィールド名で)構造体を定義するだけで動く
#[derive(Debug, serde::Deserialize)]
struct Passwd {
name: String,
passwd: String,
uid: u32,
gid: u32,
gecos: String,
dir: String,
shell: String,
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
// CSVリーダーをヘッダ無しで区切り文字コロンでPASSWD_PATHファイルから読み込みで作成
let mut reader = csv::ReaderBuilder::new()
.has_headers(false)
.delimiter(b':')
.from_reader(std::fs::File::open(PASSWD_PATH)?);
// 各行を構造体Passwdへ読み込む (様々なエラーを捕捉できるようResult型が返る)
for result in reader.deserialize::<Passwd>() {
let passwd = result?;
println!("{passwd:?}");
}
Ok(())
}
2023/08/27(日)03:03:02.52(/wQZGqy6.net)